floyd三重循环最外层为什么一定是K

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

扫描二维码关注公众号,回复: 9068328 查看本文章

如果以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

猜你喜欢

转载自www.cnblogs.com/simaomao/p/12292903.html