Floyd-Warshall算法不允许什么样的循环?

时间:2014-12-02 21:22:06

标签: algorithm graph-algorithm floyd-warshall

例如,

让我们说

1->2 costs 100
2->4 costs 600

因此1->2->4费用700

如果4到3的边缘成本为-500怎么办? 并且从3到4的不同边缘花费200

4->3 costs -500
3->4 costs 200

因此1->2->4->3->4费用400

小于700

1->2->4->3->4被认为是比1->2->4

更短的路径

我知道不允许循环,这是没有重复边的路径的示例。

顶点怎么样?如果它们重复,那么它是Floyd Warhsall的允许循环吗?

因为我知道有不同类型的算法,一种允许一种循环而不允许其他类型的循环。

有人可以向我解释一下吗?回答问题是1->2->4->3->4被认为是比1->2->4 ???

更短的路径

提前谢谢大家。

编辑:

这是一张图片,显示您不必两次访问相同的边缘。

enter image description here

2 个答案:

答案 0 :(得分:3)

Floyd Warshall是一个带约束的算法:graph with no negative cycle,如果你想在带负循环的图中找到最短路径你不能使用Floyd Warshal,这就有理由认为你的图有负周期{{ 1}}费用为4->3->4。如果你在这个周期中进行一次,你的费用从-300减少到400,但为什么要停在那里?再过一次,您的费用将为700,反复一次又一次,费用为100-200,....你可以永远这样做,算法永远不会停止。这就是Floyd Warshall算法中存在约束-500的原因。

答案 1 :(得分:2)

Floyd-Warshall算法需要一个无负循环的图形。在您的示例中,4->3->4是一个负周期,因为周期内权重的总和为-500 + 200 = -300