关于 floyd 中为什么 k 放在最外层的个人看法
关于 floyd 中为什么 k 放在最外层的个人看法
简单的讲,按照最短路比如 dij 的代码运行思路来讲,最短路的来源都是从先是点与点直接相连来更新最短路,然后再是三个点,更多点,也就是说,最短路是从两点之间的路径,一直延伸到整张图才形成。
这就与DP状态类似,你只有把
那么我们来看
- 当
k 放在外层的时候,他会与每一个 i, j 都进行一遍,此时可以发现,与k 相连的相邻节点都已经被更新过了,这相当于上边的f[1] 状态完成 - 但是当
k 放在内层的时候,k 只能更新 i ,j 这一组,
换个角度来讲,我们可以把
总的来说,中节点的选取对答案不会造成影响,说明无论选择哪个中节点,DP的过程都是一样的,而DP的过程都是从小节点路径,扩展到大节点路径,所以,这里的 k 相当于一个状态层级划分的存在,即 f[1] f[2] f[3] k=1,2,3,4,5...