多源最短路:即图中每对顶点间的最短路径
![![[Pasted image 20250417140843.png]]](https://i-blog.csdnimg.cn/direct/410e7993ca074867852df61a9790f7c8.png)
floyd算法本质是动态规划,⽤来求任意两个结点之间的最短路,也称插点法。通过不断在两点之间加⼊新的点,来更新最短路。
适⽤于任何图,不管有向⽆向,边权正负,但是最短路必须存在(也就是不存在负环)。
- 状态表⽰:
f[k][i][j]表⽰:仅仅经过[1, k]这些点,结点 i ⾛到结点 j 的最短路径的⻓度。 - 状态转移⽅程:
- 第⼀种情况,不选新来的点:
f[k][i][j] = f[k - 1][i][j]; - 第⼆种情况,选择新来的点:
f[k][i][j] = f[k - 1][i][k] + f[k - 1][k][j]
- 空间优化:只会⽤到上⼀层的状态,因此可以优化到第⼀维。
- 初始化:
f[i][i] = 0;f[i][j]为初始状态下 i 到 j 的距离,如果没有边则为⽆穷。
- 填表顺序:
- ⼀定要先枚举 k ,再枚举 i 和 j 。因为我们填表的时候,需要依赖的是 k - 1 层的状态,因此 k 必须先枚举。

最低0.47元/天 解锁文章
748

被折叠的 条评论
为什么被折叠?



