我正在研究单源最短路径问题,并对bfs进行了修改以解决该问题。该算法运行时间为O(2E)次,我只是不明白为什么它是错误的(必须是dijstra的算法不是最有效的算法)。
kubectl apply -f . # where . is the current directory
答案 0 :(得分:2)
在Dijkstra的算法中,优先级队列可确保您在不知道顶点与源的距离之前不对其进行处理。
BFS没有此属性。如果到顶点的最短路径的边多于具有最少边的路径,那么将过早处理它。
例如,当您想要从S
到T
的最短路径时,请考虑以下图表:
S--5--C--1--T
| |
1 1
| |
A--1--B
将在顶点C
之前访问顶点B
。您会认为到C
的距离是5,因为您还没有发现更短的路径。当访问C
时,它将为T
指定6的距离。这是不正确的,并且永远不会得到解决,因为C
将不会再次被访问。