Floyd算法为什么把k放在最外层? - 知乎 https://www.zhihu.com/question/30955032
高票答案:
简单地总结一下:K没放在最外面一定是错的,但是在某些数据比较水的情况下可能会AC
floyd的本质是DP,K表示的是的DP的阶段,经过这个点松弛或者不经过这个点,如果你把K放在最里面,有可能某些点没有松弛到,所求的边就不会是最优解
如下例子说明:
from to cost
1 2 4
2 3 5
3 4 3
4 5 2
1 5 1
如果以i,j,k的顺序去遍历,那么就会出现如下情况:
假设运行到i=1 j=3
k=1,1->3=inf
k=2,1->3=9
k=3, 1->3:9
k=4,还是不变 ,本来正常情况下不是可以通过4去松弛1->3的距离吗
但最优解是1->5->4->3=6
为什么会这样呢,因为在计算1->3的距离时,我们并没有去松弛 1->4的距离,造成无法通过4去松弛1->3
原文地址:https://www.cnblogs.com/simaomao/p/12292903.html
时间: 2024-11-02 07:25:26