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

Posted simaomao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

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

 

以上是关于floyd三重循环最外层为什么一定是K的主要内容,如果未能解决你的问题,请参考以下文章

wenbao与最短路(Floyd)

Floyd最短路径算法

5.6水题合集

任意两点间的最短路 Floyd及其本质

floyd求最小环

最短路径算法——弗洛伊德算法(Floyd)