学习指南 →

· Albion Gateway College

算法 Tutorial 练习:BFS 找最短路,为什么必须按层访问?

用原创无权图追踪队列、访问集合和父节点,区分最少边数与带权图的最低成本路径。

把图写成明确的邻接关系

虚构无向图边为A-B、A-C、B-D、C-E、E-D。从A到D,路径A-B-D为2条边,A-C-E-D为3条边。目标是最少边数,每条边视为相同成本。

从A开始,第一层B和C,第二层可以到D和E。按层扩展保证第一次发现D时,已经找到一条最少边数路径;同样短的路径可能有多条。

队列与访问标记一起追踪

用先进先出队列,A出队后将B、C入队并标记已发现;B出队时将D入队并记录parent[D]=B。通常在入队时标记,可防止同一节点被多个邻居重复加入。

沿父节点从D回到B再到A,反转后恢复路径A-B-D。只保存访问顺序并不一定足以直接还原路径,父节点或等价信息有独立作用。

不要把边数最少当总权重最低

若A-B和B-D各权重100,而另一条三边路线各权重1,BFS仍按层找到两边路线,却不是最低权重路线。此时需要适合权重条件的算法。

自练加一条C-D,检查不同邻居顺序可能返回不同的最短路径,但最少边数仍为2。再加入孤立节点F,程序应明确报告不可达,而不是无限等待或返回空路径当成功。

参考资料

下一步

如需大学专业课程与 Tutorial 学习支持,请填写模块名称、学习目标和已尝试步骤。具体教学安排须确认,计分作业由学生独立完成。

继续阅读

学院在线咨询

欢迎咨询

你好,欢迎咨询!你是学生、招生代理、求职者,还是想申请成为导师?请告诉我你的咨询方向。

[email protected]