You are on page 1of 4

c   

 

 .

mӛi đӍnh đúng mӝt lҫn -p Bҳt đҫu xuҩt phát tӯ mӝt đӍnh s.   @ pp ppp -p Đi qua tҩt cҧ các đӍnh cӫa đӗ thӏ. TiӃp tөc quá trình thăm các đӍnh theo nguyên tҳc: ĐӍnh nào trưӟc thì các đӍnh liӅn kӅ vӟi đӍnh đó đưӧc thăm trưӟc â p p p Op  . lҫn lưӧt thăm các đӍnh liӅn kӅ vӟi s.

} } // ? Loai w ra khoi hang doi Q #$ (mӛi v thuӝc V) } // Het vong lap while #( v chưa đưӧc thăm ) }   BeadthFirstSearch_Traversal(){ BearthFirstSearch(v).  (  u =0. } ChuaXet[v] = 1. } đánh dҩu v chưa đưӧc thăm. u++) (ChuaXet[u] == 0) BeadthFirstSearch(u). } p   DocMTKe(. #$ (mӛi đӍnh u kӅ w)  Queue[MaxV]. u<V.  (  u. '  (  u =0. E) theo bӅ rӝng &&(ChuaXet[u] == 0)){ c %" & Queue[topQ]=u.  #$ (mӛi v thuӝc V){ ChuaXet[u] == 1. V=0. bottomQ = 0. Đánh dҩu u đã đưӧc thăm Queue[topQ++] = v. # (u chưa đưӧc thăm){ Xeu u vào cuӕi hàng đӧi   BeadthFirstSearch(  v){  topQ = 0. Loҥi w ra khӓi hàng đӧi Q   (topQ > bottomQ){ } >> HӃt vòng lһp while v = Queue[bottomQ++]. u++) ChuaXet[u] = 0.pp >> Đi qua đӗ thӏ theo bӅ rӝng xuҩt phát tӯ v // DUYET DO THI THEO CHIEU RONG #include <iostream> c  { #include <fstream> Khӣi tҥo hàng đӧi Q rӛng. u< V. u++){ } ((A[v][u] != 0) >> Đi qua đӗ thӏ G = (V. using namespace std. Lҩy đӍnh w ӣ đҫu hàng đӧi Q  ChuaXet[MaxV]. u<V. Xen v vào đҫu hàng đӧi Đánh dҩu đӍnh v đã đưӧc thăm #define MaxV 20 // So dinh cuc dai cua do thi p !" (hàng đӧi Q không rӛng){  A[MaxV][MaxV].

i< V. fin. }  main(){ DocMTKe("MaTranKe. j++){ fin >> A[i][j].close(). i++){ (ChuaXet[i] == 1) cout << i+1 <<" ".  (  i = 0.txt".  A[][MaxV]. V). } .  (  i= 0. BeadthFirstSearch_Traversal(). cout <<"Cac dinh da duyet: ". * filename. j< V. fin >> V.open(filename). } system("pause"). &V){ ifstream fin. A. i< V. i++)  (  j =0. } fin.

(    .

 .

)  * @ p p p â p  .

pp >> Đi qua đӗ thì theo chiӅu sâu xuҩt phát tӯ v // DUYET DO THI THEO CHIEU SAU #include <iostream> .

u<V.  (  u = 0. }  Stack[MaxV]. // Xem nhu da duyet dinh v   (topS > 0){ // Lap neu stack o rong v = Stack[--topS]. V=0. DepthFirstSearch(u)  ChuaXet[MaxV]. u< V. u++) ((A[v][u] == 1) && (ChuaXet[u]==0)){ DepthFirstSearch(u). // Khoi tao ngan xep rong Stack[topS++] = v. u++) ChuaXet[u] = 0. // Lay v tu stack  (  u = V-1. p pp #include <fstream> DepthFirstSearch(int v){ using namespace std. }   DocMTKe(. u<V. u--) ((A[v][u]!=0) && (ChuaXet[u]==0)){ Stack[topS++] = u. u >0. E) theo do sau   DepthFirstSearch_Traversal(){  (  u=0. } // Duyet dung DE QUY   DepthFirstSearch(  v){ ChuaXet[v] = 1. #$ (mӛi đӍnh u kӅ v) # (u chưa đưӧc thăm){ #define MaxV 20 thăm u và đánh đҩu u đã thăm  A[MaxV][MaxV].  (  u=0. // Dua v vao dinh Stack ChuaXet[v] = 1. } } // Duyet dung NGAN XEP   DepthFirstSearch_Stack(  v){  topS = 0. u++) (ChuaXet[u]==0) DepthFirstSearch(u). ChuaXet[u] = 1 } } } // Di qua do thi G =(V. //DepthFirstSearch_Stack(u).

j< V. i< V.txt". } .  (  i= 0. i< V. }  main(){ DocMTKe("MaTranKe. DepthFirstSearch_Traversal().  (  i = 0.  A[][MaxV]. j++){ fin >> A[i][j]. } fin. A. V). &V){ ifstream fin. i++)  (  j =0. } system("pause").close(). * filename. cout <<"Cac dinh da duyet: ".open(filename). fin >> V. i++){ (ChuaXet[i] == 1) cout << i+1 <<" ". fin.

{ Đánh dҩu u đã đưӧc thăm. 2.E) thành danh sách topo $+$ $+ { #$ (mӛi đӍnh u thuӝc V) Đánh dҩu u chưa đưӧc thăm. Xen u vào đҫu danh sách T.TOPOLOGICAL SORTING 1. } >> Sҳp xӃp các đӍnh cӫa đӗ thӏ đӏnh hưӟng >> không có chu trình G = (V. } .p Mã giҧ $+$ $.p Lý thuyӃt -p Cho đӗ thì có hưӟng nhưng không có chu trình G = (V. Khӣi tҥo danh sách topo T rӛng.v) thuôc E thì đ Ӎnh u phҧi đӭng trưӟc v. E) Directed acylic graph > DAG -p Sҳp xӃp các đӍnh cӫa đӗ thӏ G thành mӝt danh sách sao cho nӃu có cung (u. #$ (mӛi đӍnh v kӅ u) # (v chưa thăm) TopoSort(v). #$ (mӛi đӍnh u thuӝc V) # ( u chưa đưӧc thăm) TopoSort(u).SҲP XӂP TOPO .

#$ (mӛi đӍnh u kӅ w) # (u chưa đưӧc thăm){ Xeu u vào đuôi hàng đӧi Q. E) -"" $-- $. G đưӧc gӑi là liên thông nӃu tӗn tҥi đưӡng đi giӳa 2 đӍnh bҩt kǤ cӫa đӗ thì Bài toán: Cho đӗ thӏ G = (V.+$-- { #$ (mӛi v thuӝc V) Đánh dҩu v chưa đưӧc thăm.ci). >> Đi qua đӗ thӏ theo bӅ rӝng xuҩt phát tӯ v - $-- $.THÀNH PHҪN LIÊN THÔNG ± CONNECTED GRAPH Đӏnh nghĩa: Cho đӗ thӏ G = (V.+$--/ { Khӣi tҥo hàng đӧi Q rӛng. ci = ci + 1. } Loҥi w ra khӓi hàng đӧi Q } >> HӃt vòng lһp while } >> Tìm các thành phҫn niên thông cӫa đӗ t hӏ G = (V. Xen v vào đҫu hàng đӧi. } } . E). E) tìm tҩt cҧ các thành phҫn liên thông cӫa đӗ thӏ. ci = 0. ĐӍnh i cӫa đӗ thӏ đưӧc gán nhãn ci cho biӃt thuӝc miӅn liên thông ci. Đánh dҩu v đã đưӧc thăm và gán nhãn v bҵng ci !" (hàng đӧi Q không rӛng){ Lҩy đӍnh w ӣ đҫu hàng đӧi Q. #$ (mӛi v thuӝc V) #(v chưa đưӧc thăm){ FindConnectedComponent(v. Đánh dҩu u đã đưӧc thăm và gán nhãn u bҵng ci.