floyd算法精讲

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
D (1)[0][2] Min {D (0)[0][2], D (0)[0][1] D (0)[1][2]} Min {,1 2} 3 D (1)[3][2] Min {D (0)[3][2], D (0)[3][1] D (0)[1][2]} Min {,2 2} 4
(step 0) D l ; //将有向网的邻接矩阵输入到D中 (step 1) for k = 1 to n 算法复杂度为 O(n^3) (step 3) for i = 1 to n (step 4) for j = 1 to n (step 5) D[i, j] = min{D[i, j], D[i, k] + D[k, j]} (step 6) end for (step 7) end for (step 8) end for
长度
0 来自百度文库 2
1 1 0
0 1
2 ∞ 3 2
3 7 9
0
2 A 1 7 D 1 3 2 B 2 C
2
1
∞ 1
0 BA DA
∞ 2
1 AB
3
路径
0 ∞ 4
2 ABC BC
2 0
3 AD BAD CD
0 1 2 3
3
23:15:55
2
DAB DABC
弗洛伊德算法演示
D (2)[i ][j ] Min {D (1)[i ][j ], D (1)[i ][2] D (1)[2][j ]}
长度
0
1
2
3
0
1 2 3
路径
0
2 ∞ 1
1
0 ∞ 3 2

2 0 ∞
7 ∞ 9
2 0
D (0) [3][1] Min {3,1 1} 2
0
2
A 1 7 D 1 3 2 B 2 C
1
0
BA
1
AB
2
BC
3
AD BAD CD
0 1 2 3 DA
3
23:15:55
2
DAB
弗洛伊德算法演示
D (1) [i ][j ] Min {D (0)[i ][j ], D (0)[i ][1] D (0)[1][j ]}
0 6 2
6 0 1 4
2 1 4 0 8 8 0
弗洛伊德算法的基本思想
(2)在原路径里增加一个新结点,如果产生的新路径比原路 径更小,则用新路径值代替原路径的值。这样依次产生 D(1) , D( 2) , D(3) ,D( n) n个矩阵(n为网络结点数)
(k ) 用公式表示就是,对于K=1,2,3…n,第k个矩阵 D( k ) dij
(k ) ( k 1) ( k 1) ( k 1) dij min{ dij , dik dkj }

运算过程中K从1开始,而 i,j 则分别从1到n取遍所有 值,然后k加1,直到k等于n时停止。
floyd(弗洛伊德)算法
弗洛伊德算法的基本思想
(1)给出网络的邻接矩阵D,令D(0)=D,其元素为 dij(0)
d
(0) ij
lij , i, j相连 0,i=j , i, j不相连
23:15:55
邻接矩阵
V2 6 v1 2 8 V3 图1
23:15:55
4 1 V4
D
( 0)
D (0) [i ][j ] Min {D ( 1)[i ][j ], D ( 1)[i ][0] D ( 1)[0][ j ]}
D (0) [1][3] Min {, D ( 1)[1][0] D ( 1)[0][3]} Min {, 2 7} Min {, 9} 9
D (2)[0][3] Min {D (1)[0][3], D (1) [0][2] D (1) [2][3]} Min {7, 3 2} 5 D (2) [1][3] Min {D (1) [1][3], D (1) [1][2] D (1)[2][3]} Min {9,2 2} 4
23:15:55
算法小结
23:15:55
弗洛伊德算法演示
D ( 1)[i ][j ] G .arcs[i ][j ]
长度
0 0 2 ∞ 1 0
1 1 0 ∞ 3 1 AB
2 ∞ 2 0 ∞ 2
3 7 ∞ 2 0 3 AD
0
2
A 1 3 2 B 2 C
1
0 1 2 3
路径
1 7 D
3
2
0
1
2
23:15:55
BA
DA DB
BC
CD
3
弗洛伊德算法演示
长度
0 0 2 ∞ 1 0 BA
1 1 0 ∞ 2 1
2 3 2 0 4 2
0 1 2 3
路径
3 5 7 9 4 2 0
0
2
A
1
B 3
2 C
1
1 7 D
0
1 2
AB
3 ABCD AD ABC BAD BCD BC CD
DAB C
3
23:15:55
2
2
3
DA
DAB
FLOYD算法步骤
算法:FLOYD arcs[1 n ,1 n ] ,其中有向图 输入: n n 维矩阵 G ({1, 2,..., n }, E ) 中的边 (i, j ) 的长度为arcs[i, j ] 。 D[i, j ] 等于 i 到 j 的最短路径长度。 输出: 矩阵 D ,使得
相关文档
最新文档