我正在修改单源最短路径算法,并且提到BFS无法正常工作。 但是,如果算法是dijkstra喜欢(使用dist [node]而不是visit [node]),它是否应该正常工作? ,我也有确定这个算法的复杂性的问题
答案 0 :(得分:0)
不,它无法正常工作。 BFS和Dijkstra算法的定义属性是“探索”新节点的顺序。
在BFS中,您可以根据与源的未加权距离来发现节点。
这导致在您“更新”一些先前探索过的节点后找不到最短路径的失败。例如:
v1--1-->v2--1-->v3--1-->v4--1-->v5--1-->v6
| ^
V |
--------------100---------------
在BFS中,即使使用您的解决方案,发现和更新成本的顺序也是:
v1:0
v2:1
v5:100
v3:2
v6:101
v4:3
v5:(update): 5
但请注意,现在,v6没有正确的值。
如果你想更多地调整这个解决方案并让每个'更新'触发器重新探索所有邻居 - 这将花费更多的探索(因为你不再受|V|+|E|
的限制,事实上可能导致非常效率低下的算法。