Giải Thuật Và Lập Trình - C: IV. Các Phép Duyệt đồ Thị (Traversals Of ...
Có thể bạn quan tâm
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 vThủ tục dfs ở trong giải thuật ở trên có thể được viết như sau:
void dfs(vertex v){// v từ 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 duyệt nên phép duyệt dfs(B) đã hoàn tất. Bây giờ giải thuật sẽ tiếp tục với đỉnh kề với G mà 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.
Từ khóa » Cách Duyệt Chiều Sâu
-
Tìm Kiếm Theo Chiều Sâu – Wikipedia Tiếng Việt
-
Giải Thuật Tìm Kiếm Theo Chiều Sâu (Depth First Search) - VietTuts
-
Tìm Kiếm Theo Chiều Sâu DFS - Depth First Search - Toán Rời Rạc
-
Giải Thuật Tìm Kiếm Theo Chiều Sâu - Hoclaptrinh
-
Thuật Toán DFS – Tìm Kiếm Theo Chiều Sâu | Chuong Le Hoang
-
Chi Tiết Bài Học Duyệt Cây Theo Chiều Sâu - Vimentor
-
Thuật Toán DFS – Tìm Kiếm Theo Chiều Sâu Trên đồ Thị - TEK4
-
Tìm Kiếm Theo Chiều Sâu - Wiki Là Gì
-
Thuật Toán Về Tìm Kiếm Theo Chiều Sâu DFS Bằng Ngôn Ngữ C/C++
-
Các Giải Thuật Tìm Kiếm Trên đồ Thị - Viblo
-
Cây DFS (Depth-First Search Tree) Và ứng Dụng - VNOI
-
Cấu Trúc Dữ Liệu: Các Phép Duyệt đồ Thị (Traversals Of Graph) - VOER
-
Duyệt đồ Thị Theo Chiều Sâu C++ - Tin Tức Giáo Dục Học Tập Tiny
-
Thuật Toán Tìm Kiếm Theo Chiều Sâu - [Giáo Trình] Phân Tích Thiết Kế ...