在一本书中指出," Dijkstra算法仅适用于有向无环图"。
只要没有负循环,该算法似乎适用于具有周期的图形。这是对的吗?
编辑1: 这本书" Grokking算法" -Aditya Bhargava。 第7章。第122页。
答案 0 :(得分:9)
我是 Grokking Algorithms 的作者。很抱歉这个错误-Dijkstra的算法 在带有周期的图上工作,只要它是一个正的权重周期。我已更新errata page以反映此错误。 Dijkstra's不适用于负重量周期,这是一个解释原因的图像:
答案 1 :(得分:4)
实际上,只要所有边权重都是非负的,它就会起作用。这是一个更强的条件,因为“没有负面循环”。另一方面,它不适用于具有负权重的DAG。因此,如果您正确引用,本书中的陈述有两个原因是错误的。
顺便说一下。如果你有负循环,那么可能不再是最短的路径,因为你可以循环无数次并随着你的成本随意降低。
答案 2 :(得分:0)
如果有人正在寻找一个负权重的DAG示例,而Dijkstra没有给出正确的最短路径:http://stackoverflow.com/a/6799344/3924118