floyd三重循环最外层K的含义---看完不懂来锤我!

Floyd算法为什么把k放在最外层? - 知乎 https://www.zhihu.com/question/30955032
高票答案:
floyd三重循环最外层K的含义---看完不懂来锤我!_第1张图片
简单地总结一下:K没放在最外面一定是错的,但是在某些数据比较水的情况下可能会AC
floyd的本质DP,K表示的是的DP的阶段,经过这个点松弛或者不经过这个点,如果你把K放在最里面,有可能某些点没有松弛到,所求的边就不会是最优解

如下例子说明:
floyd三重循环最外层K的含义---看完不懂来锤我!_第2张图片

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

你可能感兴趣的:(最短路)