III. BIỂU DIỄN ĐỒ THỊ
1. Duyệt theo chiều sđu (depth-first search)
Giả sử ta có đồ thị G=(V,E) với câc đỉnh ban đầu được đânh dấu lă chưa duyệt (unvisited). Từ một đỉnh v năo đó ta bắt đầu duyệt như sau: đânh dấu v đê duyệt, với mỗi đỉnh w chưa duyệt kề với v, ta thực hiện đệ qui quâ trình trín cho w. Sở dĩ câch duyệt năy có tín lă duyệt theo chiều sđu vì nó sẽ duyệt theo một hướng năo đó sđu nhất có thểđược. Giải thuật duyệt theo chiều sđu một đồ thị có thểđược trình băy như sau, trong đó ta dùng một mảng mark có n phần tửđểđânh dấu câc đỉnh của đồ thị lă đê duyệt hay chưa.
//đânh dấu chưa duyệt tất cả câc đỉnh
for (v =1; v <=n; v++) mark[v-1]=unvisited; //duyệt theo chiều sđu từ đỉnh đânh số 1
for (v = 1; v<=n; v++)
if (mark[v-1] == unvisited)
dfs(v); //duyệt theo chiều sđu đỉnh v
Thủ tục dfs ở trong giải thuật ở trín có thểđược viết như sau:
void dfs(vertex v) // v ∈ [1..n] { vertex w; mark[v-1]=visited; for (mỗi đỉnh w lă đỉnh kề với v) if (mark[w-1] == unvisited) dfs(w); }
Ví dụ: Duyệt theo chiều sđu đồ thị trong hình V.3. Giả sử ta bắt đầu duyệt từđỉnh A, tức lă dfs(A). Giải thuật sẽđânh dấu lă A đê được duyệt, rồi chọn đỉnh đầu tiín trong danh sâch câc đỉnh kề với A, đó lă G. Tiếp tục duyệt đỉnh G, G có hai đỉnh kề với nó lă B vă C, theo thứ tựđó thì đỉnh kế tiếp được duyệt lă đỉnh B. B có một đỉnh kềđó lă A, nhưng A đê được
còn chưa duyệt lă C. C không có đỉnh kề nín phĩp duyệt dfs(C) kết thúc vậy dfs(A) cũng kết thúc. Còn lại 3 đỉnh chưa được duyệt lă D,E,F vă theo thứ tự đó thì D được duyệt, kế đến lă F. Phĩp duyệt dfs(D) kết thúc vă còn một đỉnh E chưa được duyệt. Tiếp tục duyệt E vă kết thúc. Nếu ta in câc đỉnh của đồ thị trín theo thứ tựđược duyệt ta sẽ có danh sâch sau: AGBCDFE.
Ví dụ duyệt theo chiều sđu đồ thị hình V.4 bắt đầu từđỉnh A: Duyệt A, A có câc đỉnh kề
lă B,C,D; theo thứ tự đó thì B được duyệt. B có 1 đỉnh kề chưa duyệt lă F, nín F được duyệt. F có câc đỉnh kề chưa duyệt lă D,G; theo thứ tự đó thì ta duyệt D. D có câc đỉnh kề
chưa duyệt lă C,E,G; theo thứ tựđó thì C được duyệt. Câc đỉnh kề với C đều đê được duyệt nín giải thuật được tiếp tục duyệt E. E có một đỉnh kề chưa duyệt lă G, vậy ta duyệt G. Lúc năy tất cả câc nút đều đê được duyệt nín đồ thị đê được duyệt xong. Vậy thứ tự câc đỉnh
được duyệt lă ABFDCEG.