一本书中提到:“Dijkstra算法仅适用于有向无环图(Directed Acyclic Graphs)。”
实际上,只要没有负权重的环路,该算法也可以用于带有环路的图。这个说法正确吗?
编辑1:书名《算法图解》 (Grokking Algorithms) - Aditya Bhargava, 第7章,第122页。
一本书中提到:“Dijkstra算法仅适用于有向无环图(Directed Acyclic Graphs)。”
实际上,只要没有负权重的环路,该算法也可以用于带有环路的图。这个说法正确吗?
编辑1:书名《算法图解》 (Grokking Algorithms) - Aditya Bhargava, 第7章,第122页。
我是《算法图解》的作者。对于这个错误表示歉意——Dijkstra算法可以处理具有正权重环的图形。 我已更新勘误页面以反映此错误。 Dijkstra算法无法处理具有负权重环的情况,以下是说明其原因的图片:
实际上,只要所有边权值都是非负数,它就可以工作。这是比“没有负环”更强的条件。另一方面,它不能在具有负权重的DAG上工作。因此,如果你引用的正确,那么从书中得出的结论是错误的,原因有两个。
顺便说一下,如果有负环,可能不再存在最短路径,因为你可以无限循环并以任意成本下降。
如果有人正在寻找一个具有负权值的示例DAG,而Dijkstra算法不能给出正确的最短路径,请参考以下链接:https://dev59.com/q2w15IYBdhLWcg3wJ4YR#6799344