我阅读了 floyd warshall 算法的伪代码,
1 let dist be a |V| × |V| array of minimum distances initialized to ∞ (infinity)
2 for each vertex v
3 dist[v][v] ← 0
4 for each edge (u,v)
5 dist[u][v] ← w(u,v) // the weight of the edge (u,v)
6 for k from 1 to |V|
7 for i from 1 to |V|
8 for j from 1 to |V|
9 if dist[i][j] > dist[i][k] + dist[k][j]
10 dist[i][j] ← dist[i][k] + dist[k][j]
11 end if
但它只使用一个 dist 矩阵来节省距离。我认为应该有 n 个 dist 矩阵,其中 n 是顶点的数量,或者至少我们需要两个 dist 矩阵。一个将当前的最短路径存储在顶点 k-1 内,另一个存储在顶点 k 内的最短路径,然后第一个存储在 k+1 内的最短路径,.... 我们如何才能将新的最短路径距离存储在顶点内k 在原始矩阵中的顶点 k-1 内的距离?
这张图片显示我们需要 D0, D1, D2....D(n)