if D(i,k)+D(k,j)<D(i,j) % 判断是否满足插入条件 - @. t; A* M8 U1 X$ r
D(i,j)=D(i,k)+D(k,j);) I9 K5 Y1 ^2 `% P& {
R(i,j)=k; f4 p( L7 E7 E% |* V, n
end ( v5 u+ Y; T3 w4 g( Q" _1 s
end + I, G/ \# ]3 t; y, J, C
end; o8 e$ V( O6 u# p
end
复制代码
D % 输出距离矩阵 5 H7 ~; p0 F, q" Y V. \R % 输出路径矩阵! U7 v5 o2 T. g2 d" V8 E
- [& W3 E- \4 b
解释: 2 J# o- G5 v2 G0 Y5 `6 U3 |$ L- M; B) q5 v0 z
1.带权图的表示: 给定图被表示为邻接矩阵 w,其中 w(i, j) 表示从顶点 i 到顶点 j 的边的权重。inf 用于表示两个顶点之间没有直接的边。! m; n, p( e2 b( X5 I
2.初始化: 距离矩阵 D 被初始化为与邻接矩阵相同的值。路径矩阵 R 被初始化为一个矩阵,其中每个元素 R(i, j) 最初被设置为 j。0 ]) _/ h; C3 J5 C
3.Floyd-Warshall算法: 嵌套循环实现了Floyd-Warshall算法。外层循环 (k) 代表通过哪个中间顶点进行路径检查。内层循环 (i 和 j) 遍历所有顶点对,并检查通过 k 从 i 到 j 的路径是否比直接从 i 到 j 的路径更短。如果是这样,就更新距离矩阵 D 和路径矩阵 R。 % Q6 I m H5 @# _" @4.输出: 最终的距离矩阵 D 和路径矩阵 R 被显示。" F3 u; S9 \/ D
$ T4 P( W( a" a输出包含最终的距离矩阵和表示路径的矩阵。元素 D(i, j) 表示从顶点 i 到顶点 j 的最短距离,而 R(i, j) 表示从 i 到 j 的最短路径上的中间顶点。 & ?: ~: W N6 j& q1 i/ G; H0 I5 F5 ~8 Y: f4 F$ p* M& k