Dijkstra的算法和循环

时间:2017-04-13 14:23:21

标签: algorithm graph-algorithm dijkstra

在一本书中指出," Dijkstra算法仅适用于有向无环图"。

只要没有负循环,该算法似乎适用于具有周期的图形。这是对的吗?

编辑1:  这本书" Grokking算法" -Aditya Bhargava。  第7章。第122页。

3 个答案:

答案 0 :(得分:9)

我是 Grokking Algorithms 的作者。很抱歉这个错误-Dijkstra的算法 在带有周期的图上工作,只要它是一个正的权重周期。我已更新errata page以反映此错误。 Dijkstra's不适用于负重量周期,这是一个解释原因的图像:

dijkstra's algorithm with a negative weight cycle

答案 1 :(得分:4)

实际上,只要所有边权重都是非负的,它就会起作用。这是一个更强的条件,因为“没有负面循环”。另一方面,它不适用于具有负权重的DAG。因此,如果您正确引用,本书中的陈述有两个原因是错误的。

顺便说一下。如果你有负循环,那么可能不再是最短的路径,因为你可以循环无数次并随着你的成本随意降低。

答案 2 :(得分:0)

如果有人正在寻找一个负权重的DAG示例,而Dijkstra没有给出正确的最短路径:http://stackoverflow.com/a/6799344/3924118