( M) z0 S$ E- ~Floyd算法 ( |- ]4 u- l' ?' z9 i4 G8 B- B 7 ~4 s5 {# T7 d6 R2 Y# K算法的基本思想9 Q( P$ D1 M+ F, Q
. Z; A1 {$ f- G$ O0 F0 }, @( k i: j
直接在图的带权邻接矩阵中用插入顶点的方法依次构造出ν 个矩阵D(1)、D(2)、…、D(ν) D(1)、 D(2)、 … 、D(ν)D(1)、D(2)、…、D(ν),使最后得到的矩阵 D(ν) D(ν )D(ν)成为图的距离矩阵,同时也求出插入点矩阵以便得到两点间的最短路径。 1 v* ~, q' g8 a6 D& ](I)求距离矩阵的方法. & b1 K& W; N6 K' G1 O(II)求路径矩阵的方法. ! u9 W& }9 w; l3 w(III)查找最短路路径的方法.. Z4 O$ ]* a& I, C6 X0 P( v
s) T0 b: E5 M3 M0 r
Floyd有两个矩阵,一个是D矩阵(代表距离),一个是R矩阵(代表中介点) 9 |" t5 P& X4 n, o! c0 s- J3 Y( L& h4 A) E 3 L0 K+ l+ d, D
) Z, v4 r/ @3 d- s4 _; e% o * t7 K% R$ L9 c* \; N" U6 ]在这里相当于v1 v_1v 7 q) H1 h* g; O7 q ~
1( t7 O V5 v. Z* W+ e! N" h
7 W! O" t' H$ {/ A2 }
被打通了,此时v1 v_1v 2 N) Q: A; `2 T1 1 A) {8 H( c6 E* Y: u+ a5 z1 | 6 p D0 ^$ y1 f, C. n 就可以作为中介点连接。$ |6 p; r2 [4 J) b `
于是遍历和v1 v_1v q! u7 ^( p. p
1- k/ V3 D& n* p* S& z
; ]: l( f* T% V$ x7 t5 `3 d 连接的点,例如此时遍历到v2 v_2v ' H# |+ S6 L2 X! z- }1 E+ P, i
2. [" a6 a' ?/ s0 I3 [; r4 |: H
* [4 N" ^6 t) h8 y. I" [ 。 % ^4 ?1 u: F. O3 ]+ l然后再以v2 v_2v . W3 s- h$ C R& I; @: J2: ]/ ^/ u; o r
0 a) }0 @9 M- T# ?
为基准,遍历和v1 v_1v $ u& u0 G& r, e1! ~: C+ T4 Y H0 G
$ Y" f+ E$ @8 o/ G; p; b
连接的点。# R8 R# \+ P5 T! M* z
所有遍历到的点都尝试一下是否可以变化距离矩阵,如果可以变化,那么再他们的中介点矩阵上打入"1"的标记。( W4 Y5 y" }6 K1 L& f( Y! Y
; n$ m" ~- C0 q5 i) g9 z7 q( W, u) _5 S- S Q; B: b$ r 8 M6 c" ?# o# o9 B- m" ~6 }2 G0 W1 A/ [- g/ u7 r / t* O; b9 Y7 Z/ F # [ X% _. o& | h6 S/ B- a8 p' x7 e3 @; @* @! \( C' y
$ R( P7 u8 b: e5 s " P5 `& k- k1 }: m4 f( q# A( |) E这里的逻辑是这样的:5 ]$ q, ~: G1 i: V& {
最小生成树 & \, i5 a. P' ^7 h5 m/ `% Y C. ?# ]. z$ _
(略)+ ~3 z7 W9 ^8 K) ?" u! s1 W
————————————————# X6 c' N( t M; h Z* H
版权声明:本文为CSDN博主「Mr. Water」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。1 `' ^) @( a M) H% |
原文链接:https://blog.csdn.net/narcissus2_/article/details/100022182 3 {9 x: l5 O& C) N' a 3 W! e5 D; Q) t& ]2 H4 w& T+ S) G& k1 |0 N7 I, K