🔗 Floyd · 多源最短路径

▶ 📖 问题描述 & 算法原理

Floyd-Warshall 算法:求解任意两点之间的最短路径。给定一个带权有向图,边的权重可为正或负(但无负环)。算法通过动态规划,逐步允许经过更多的中间顶点,最终得到所有点对的最短距离。

输入: 邻接矩阵(带权),不连通处为 INF(∞)。
输出: 所有点对的最短距离矩阵。

📌 算法原理

状态定义: dp[k][i][j] 表示从 i 到 j,只经过前 k 个顶点(编号 0..k-1)作为中间点的最短距离。

转移方程(压缩二维):
dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j])   对于每个中间点 k,遍历所有 i, j。

⚠️ 为什么枚举顺序是“k → i → j”?
因为 dp[i][j] 的更新依赖于 dp[i][k] 和 dp[k][j],这些值必须是在使用了前 k-1 个中间点后的结果(即本轮 k 尚未更新),所以我们按 k 递增,且 i,j 任意顺序,只要保证 k 在外层即可。

该算法时间复杂度 O(n³),空间 O(n²)。

📊 图 & 当前距离矩阵 (点击矩阵值可编辑)

📝 当前步骤 0 / 0
点击「下一步」开始演示

📊 距离矩阵 (dp[i][j])

⬜ 未变  |  🟦 已计算  |  🔵 当前更新  |  🟡 刚更新  |  ✅ 最终
🎉 所有点对最短路径已求出! —