Mto xplorr rurilor. Explorr (su trvrsr ) unui r st o mtoă sistmtiă prurr, prin xminr muiilor şi vârurilor. O trvrsr iintă r lo în timp linir O(n+m). rvrsr în ânim unui r (DFS Dpt First Sr). In zul rurilor norintt, trvrsr în ânim st o mtoă iintă pntru: ăsir uni ăi într ouă vâruri trmin ă un r st onx trminr rorlui oprir unui r onx Prin trvrsr DFS unui r norintt s oţin un ror oprir în ânim. In st sop: s pornşt intr un vâr s (vâr strt). Iniţil vârul urnt u v i vârul strt. Fi (u, v) o mui inintă în vârul urnt u. Sunt posiil 2 situţii: vârul v nu ost înă xplort (vizitt), z în r: s mrză vârul vizitt s ontinuă xplorr in v vârul v ost j vizitt, situţi în r s rvin în u şi s înră vizitr unui lt vâr int lui u ă s u vizitt tot vâruril int lui u, s un ps înpoi, lân lt vâr urnt u, u muii nxplort, Prosul s îni ân n întorm în s. Mui xplortă in u, r onu l un vâr nsoprit st o mui ror. O mui in u, r onu l un vâr j vizitt, st o mui rvnir. E iniă prznţ unui ilu. Fi o trvrsr DFS într un r norintt G, pornin in vârul strt u: trvrsr vizitză tot vâruril omponnti onx lui s muiil ror ormză un ror oprir omponnti onx lui s. In trvrsr, unţi DFS st pltă o sinură tă pntru ir vâr,.î. ir mui st xmintă 2 ori, ât o tă pntru ir xtrmitt. Complxitt loritmului v i şr O(n+m). Următorii loritmi s zză p trvrsr în ânim (DFS) şi u şi omplxitt: 1) tst onxitt r 2) trminr ror oprir pntru r onx 3) trminr omponnt onx l rului 4) trminr uni ăi într ouă vâruri 5) trminr unui ilu (su trminr inxistnţi ilurilor). rvrsr în ânim unui r norintt lsiiă muiil rului în: muii ror muii rvnir loritm DFS(u) or ir mui inintă în u v = llt xtrmitt lui ; i v nvizitt >tip = ror; DFS(v); ls >tip = rvnir; rorl oprir în ânim st păstrt prin surul prsor G p = (V, E p ) în r: 1
E p = {(pr(v), v): v V pr(v) 0 S osrvă ă E p păstrză muiil ror. voi DFSV(Gr G, Vr u){ Vr v; G_StCol(G, u, ri); or(v=primv(g);!ultv(g); v=vnsv(g,v)) i(g_isv(g,v) && G_Is(G,u,v) && G_GtCol(G,v)==l){ G_StPr(G, v, u); DFSV(G, v); voi DFS(Gr G){ Vr u; or(u=primv(g);!ultv(g); u=vnsv(g,u)) i(g_isv(g,u)){ G_StCol(G, u, l); G_StPr(G,u, 0); ; or(u=primv(g);!ultv(g); u=vnsv(g,u)) i(g_isv(g,u) && V_GtCol(u)==l) DFSV(G, u); Spr osir ruril norintt, l r în ursul trvrsării un vâr pot i vizitt su nvizitt, pntru ruri orintt, s istin 3 stări, intiit prin ulori: 0 = l pntru vâr nvizitt 1 = ri pntru vâr vizitt, ărui listă susori nu ost în întrim xplortă 2 = nru pntru vâr vizitt, u listă susori xplortă Pntru ir vâr u s mrză ouă momnt: strt[u] = momntul sopririi vârului stop[u] = momntul în r s xplort list susori i vârului u Intr un r orintt, rl siil in s s lsiiă în: r ror r onu l soprir vâruri noi r rvnir r lă un vâr u un strămoş în rorl DFS r înintr r lă un vâr u un snnt în rorl DFS r trvrsr r lă vâruri in rori DFS iriţi (nu s înrză în toriil prnt). int strt[2*m], stop[2*m]; int t; voi DFS(Gr G){ Vr u; or(u=primv(g);!ultimv(g); u=vnsv(g,u)) i(g_isv(g,u)){ G_StCol(G, u, l); G_StPr(G, u, 0); ; t = 0; or(u=primv(g);!ultimv(g); u=vnsv(g,u)) i(g_isv(g,u) && G_GtCol(G, u)==l) DFSV(G, u); 2
voi DFSV(Gr G, Vr u){ Vr v; G_StCol(G, u, ri); strt[u] = ++t; or(v=primv(g);!ultimv(g); v=vnsv(g,v)) i(g_isv(g,v) && G_Is(G,u,v) && G_GtCol(G,v)==l){ G_StPr(G, v, u); DFSV(G, v); ; G_StCol(G, u, nru); stop[u] = ++t; O unţi DFS nrursivă olosşt o stivă: DFS(G, s){ pun noul strt in stivă; ât timp(stivă nviă){ sot in stivă în x; mrr x; pun în stivă susorii nvizitţi i lui x; voi DFSV(Gr G, Vr u){ Stiv S = S_Nw(); Pus(S, u); Vr x, v; wil(!s_empty(s)){ x =*(Vr*)Pop(S); i(g_gtcol(g, x)==l){ G_StCol(G, x, ri); or(v=primv(g);!ultimv(g); v=vnsv(g,v)) i(g_isv(g,v) && G_Is(G,x,v) && G_GtCol(G,v)==l){ Pus(S, v); G_StPr(G, v, u); rvrsr DFS pot olosi l lsiir rlor. stl ă: olort[v] = l (u, v) r ror olort[v] = ri (u, v)r rvnir olort[v] = nru strt[u] < strt[v] (u, v)r înintr strt[u] > strt[v] (u, v)r trvrsr 3
1/12 2/11 8/9 5/6 vir List susori 3/10 4/7 vir pr olort strt sto p 0 0 1 2 1 12 0 0 1 2 2 11 0 0 1 2 3 10 0 0 1 2 4 7 0 0 1 2 8 9 0 0 1 2 5 6 rvrsr în lăţim (BFS Brt First Sr). Prin trvrsr în lăţim unui r G = (V, E) s rză un ror prurr în lăţim: G p = (V p, E p ) V p = { v V : pr[v] 0 {s E p = {(pr[v],v) E : v V p {s Folosit pntru işr ăii l vârul strt s l un vâr v: voi isl(gr G, Vr s, Vr v){ i(v==s) print( %s\n, V_GtEt(v)); ls i(g_gtpr(g, v)==0) print( nu xist rum\n ); ls{ isl(g, s, G_GtPr(G, v)); print( %s\n, G_GtEt(G, v)); Prin trvrsr în lăţim, pornin in vârul sursă s: s lulză istnţ (în număr muii) l sursă l ir vâr 4
pntru ori vâr v, siil in surs s,l în ror orspun lui mi surt rum l s l v voi BFS(Gr G, Vr s){ Vr u,v; Quu Q=Q_Nw(); or(u=primv(g);!ultimv(g); u=vnsv(g,u)){ i(g_isv(g,u)){ G_StCol(G, u, l); G_StDist(G, u, INF); G_StPr(G, u, NULL); G_StCol(G, s, ri); G_StDist(s, 0); Enq(Q, s); wil(!q_empty(q)){ u = Front(Q); or(v=primv(g,u);!ultv(g,u); v=vnsv(g,u,v) i(g_gtcol(g, v)==l){ G_StCol(G, v, ri); G_StDist(G, v, G_GtDist(G,u) + 1); G_StPr(G, v, u); Enq(Q, v); Dq(Q); G_StCol(G, u, nru); 1 0 2 3 S U V W X Y 2 1 2 vir pr olort s 0 01 2 0 r 0 s 0 1 2 ω 1 t 0 w 0 1 2 ω 2 u 0 t 0 1 2 ω 3 v 0 r 0 1 2 ω 2 w 0 s 0 1 2 ω 1 x 0 w 0 1 2 ω 2 y 0 x 0 1 2 ω 3 3 5
Evoluţi ozii p prursul xuţii loritmului BFS st: Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q. s sr srw rw rwv wv wvt wvtx vtx tx txu xu xuy uy y Prin trvrsr în lăţim unui r norintt pr muii ror şi muii trvrsr. L trvrsr în lăţim unui r orintt pr: r ror, r trvrsr şi r rvnir. rorl prurr în lăţim st: S W V X U Y Sortr topoloiă. Intr un r orintt prznţ unui r (u, v) pot i privită o rlţi prnţă: u pr v. ipro, mi mult lmnt într r xistă rlţii prnţă pot i rprzntt printr un r orintt. Dă nu xistă iluri, st posiilă ăsir uni rlţii orin p nsmlul tuturor vârurilor rului. O sortr topoloiă unui r orintt ili st o oronr liniră vâruri în r u pr v, ă xistă rul (u, v). Un loritm sortr topoloiă r onsir mi întâi vâruril r nu sunt prt (oniţiont) lt vâruri, iă vâruril sursă (u r intrior nul), upă r urmză vâruril r su p l intâi ş..m.. o sst un vâr v u in[v]=0 pun v în oă ştr vârul v şi rl inint în vâr wil mi sunt vâruri) Sortr topoloiă s pot rliz printr o trvrsr în ânim (DFS). Un vâr r nu mi r susori (olort nru) r r işir 0, i pr în rpt şirului vâruri sortt topoloi; l v i pus în stivă,.î. în vârul stivi vor pr vâruril u r intrr 0. 6
voi topsort(gr G, Vr u){ Stiv S=S_Nw (); Vr v; G_StCol(G, u, ri); or(v=primv(g);!ultimv(g); v=vnsv(g,v)) i(g_isv(g,v) && G_Is(G, u, v) && G_GtCol(G,v)==l) topsort(g, v); Pus(S, u); Pntru rul mi jos: Păur oprir în ânim st: Elmntl sunt pus în stivă în orin:, i sortr topoloiă st: S onsttă ă xistă mi mult vrint sortr topoloiă, or vâruril inpnnt, vân l un momnt t rul intrr 0 pot i onsirt în ori orin. Dtrminr omponntlor tr onx. O omponntă tr onxă unui r orintt G = (V, E) st un st mximl vâruri U V.î. pntru u, v U vm u v şi v u (vâruril u şi v sunt siil unul in lăllt). S ormză rul trnspus, invrsân irţi rlor. G = (V, E ) E = {(u, v) : (v, u) E Gruril G şi G u lşi omponnt tr onx. loritmul pntru lulul omponntlor tr onx prsupun ouă trvrsări în ânim: în prim trvrsr rului G s lulză timpii trminării stop[u] pntru ir vâr u. ou trvrsr 7
s supr rului trnspus G în orin vârurilor ittă vtorul stop[]. Fir ror in păur oprir în ânim li ou prurri rprzintă o omponntă tr onxă. CC(G) DFS(G) Clul G DFS(G ) în orin itt stop[] 1/16 2/15 3/12 4/7 13/14 9/10 8/11 5/6 vr pr olor strt stop1 0 0 1 2 1 16 0 0 1 2 2 15 0 0 1 2 3 12 0 0 1 2 4 7 0 0 1 2 13 14 0 0 1 2 9 10 0 0 1 2 8 11 0 0 1 2 5 6 Grul trnspus st: 8
I vr stop1 pr olor strt stop 16 0 0 1 2 1 6 15 0 0 1 2 3 4 14 0 0 1 2 2 5 12 0 0 1 2 7 10 11 0 0 1 2 11 14 10 0 0 1 2 12 13 7 0 0 1 2 8 9 6 0 0 1 2 15 16 9