You are on page 1of 3
8.7. BUONG DI SCTE Gita MOQI CAP DINH - THUAT TOAN FLOYD 6 chu trink luéng, c6 trong so G = (V, B) véi n din va m canh, Bai toan dat ra 1a hay tinh tt c4 cde d(u, v) ld khodng céch tir u téi v, R6 rang la ta c6 thé 4p dung thuat ton tim duéng di ngin nbdt xuat phét tir mt dinh v6i n kha nang chon dinh xudt phat. Nhimg ta e6 céch lam gon hon nhiéu, cach lim nay rat giéng véi thuat toan Warshall ma ta da biét: Tir ma trn trong sé c, thuat todn Floyd tinh lai cdc c[u, v] thanh 6 dai duéng di ngin nat tiru ti v: Voi moi dinh k cia d6 thi duge xét theo thir ty tir 1 téi n, xét moi cfp dinh u, v. Cye tigu hod c[u, v] theo céng thitc: cu, v] = min(efu, v], cfu, k] + efk, v]) Tite 14 néu nhu during di tir u t6i v dang c6 lai dai hon duimg di tir u toi k cOng véi dudmg di tirk t6i y thi ta huy bo during di tir u t6i v hign thoi va coi dudng di tir u téi v sé 1A néi cia hai dudng di tir u t6i k rdi tir k t6i v (Chui y ring ta cn c6 viée hum lai vét): elu, v] := min(efo, vl, cfu, k] + eft, v1); Tinh ding cia thuat todn: Goi ck{u, v] 1a d6 dai duong di ngin nhdt tir u téi v ma chi di qua céc dinh trung gian thude tap {1, 2, ..., k}. RG ring khi k = 0 thi cfu, v] = cfu, v] (dung di ngin nhét la dung di tree Gia str ta da tinh duge cac c*"[u, v] thi c*{u, v] sé duge xy dumg nhu sau: Néu duéng di ngin nhat tir u téi v ma chi qua céc dinh trung gian thudc tap {1, 2, ..., k} lai: * Kh6ng di qua dinh k thi tie 1a chi qua cdc dinh trung gian thugc tap {1, 2, ...,k~ 1} thi cfu, vy] = ck" [u, v] + C6 di qua dinh k thi dug di dé sé 1A néi cha mét dung di tir u t6i k va mot dudng di tirk t6i v, hai dung di nay chi di qua cdc dinh trung gian thuge tip {1, 2, ..., k- 1}. cfu, v) =c'[u, k] + c*'[k, v]. Vi ta muén c*[u, v] li oye tiéu nén suy ra: e[u, v] = min(c*"fu, v), Tu, k] +c'[k, vp). DHSPHN 1999-2004 Ly thuyét 48 thj Use ‘Va cui cing, ta quan tim t6i c"[u, v]: D6 dai dung i ngdin nhit ti u t6i v ma chi di qua cde inh trung gian thugc tip {1, 2, ...,.m}. Khi cai dat, thi ta sé khdng cé cdc khdi nigm ¢'[u, v] ma sé thao tac trvc tiép trén cae trong sé cfu, v]. efu, v] tai bude t6i uu thir k s& duge tinh toan dé tdi uu qua cde gid tri c[u, v]; cfu, kK) va clk, v] tai bude thir k- 1. Tinh chinh xéc ca céch cai dat duéi dang ba vong lap for nhu trén c6 thé thdy duge do su t6i wu bic cau chi lim tin; téc d6 t6i wu cdc c[u, v] trong mé bude ( Xem Lac sutar uu bic cats aia Hust tazm Fond Bellman), RE a ({0E DELPET) (This progran uses 32-bit Integer progran Shortest Path by Floyd; const TnpotFile = 'MINPATH. INP"; utputrile = "MnnpATH. OUT"; sax = 1000; saxtC = 10 sax = max * naxiC; + array[1..nax, 1..max) of Integer; ‘race: array[1. max, 1. max] of Integer; (Trace(u, v] = Binh 1ién san u trén dung di by sy f: Integer; ch t6t procedure LoadGraph; (tp iy a, uy v: Integer; hy Text; Degin Aseign( fi, IaputFile); Reset (f1); aadla(ti, a, a, 5, £); foru:e1 toad forv =i toa do 4a =y then oft, v] := 0 else clo, v] := masts fa, 48 thi Bifog dope 6 cba for i c= 1 tom do Readia(ti, u, v, eft, vl); Close (ti); ed; procedure Floyd mar , a, vs Integers begin fora :=1 ton d> for v := 1 to n do Teace[u, v] ce vi (Gia si dvéng gla nt ofa mph ofp dlnh 18 aatag trie tilp) {thuft toin Floy fork := 1 ton do for u i= 1 to n do fory #1 toad if clu, v1 > elt, EI + elk, v) then (Dvdng 4: tb qua k tht on) begin fy, wf := ef, E] + elk, o] ‘eace(y, v] := Trace(u, 7 nd (Gh shan nig 5 ehay eho ang) (uu wht ving i) nd; prscedare Printenst (on didn 4th st6i fh fo: tet: basi ‘Resign (fo, output); Revrte(fo) if cls, f] = mat 286 else begin Writela(fo, "Distance fron", , ' to', £,' repeat. Write(fo, 5, '->'); 8 := Trace[s, f]; {whic lai ring Trace(s, f) 18 dinh lin sau s trén dung di tdi £)" until s Writeln(fo, £); end; Close fo) end begin Toadsraph; Floyd PrintResult; end, then Writeln(fo, "There is no path from ', 5, ' to, £) pty els, ile Khac biét r3 ring cia thuat ton Floyd 1a khi can tim duéng di ngin nat gitta mot cap dinh Khéc, churong trinh chi vie in két qua chit khéng phai thyc hign Iai thuat todn Floyd nia

You might also like