使用 Dijkstra 算法的负循环
Negative Cycles with Dijkstra's Algorithm
所以我完全理解为什么负边权重不能与 Dijkstra 算法一起使用,例如:
A
/ \
/ \
/ \
5 2
/ \
B--(-10)-->C
但是,我读到 "if there is any negative cycle in graph you would never stop updating distance in vertices. This will cause a infinite loop." 我不明白如果我们在访问顶点时声明顶点 "done" 会怎样。如果我们不能重新访问我们已经访问过的顶点,我们怎么能进入一个循环?
您描述的版本确实会避免循环。如果最低成本路径有负边,但有更直接的路径没有负边,它也可能无法发现正确的最低成本路径。
所以我完全理解为什么负边权重不能与 Dijkstra 算法一起使用,例如:
A
/ \
/ \
/ \
5 2
/ \
B--(-10)-->C
但是,我读到 "if there is any negative cycle in graph you would never stop updating distance in vertices. This will cause a infinite loop." 我不明白如果我们在访问顶点时声明顶点 "done" 会怎样。如果我们不能重新访问我们已经访问过的顶点,我们怎么能进入一个循环?
您描述的版本确实会避免循环。如果最低成本路径有负边,但有更直接的路径没有负边,它也可能无法发现正确的最低成本路径。