Cho G = (V,E) là đồ thị có tập các đỉnh V và tập các cạnh E. v là một đỉnh trong V va u là đỉnh kề của v, sao cho u cũng thuộc V. Khi đó ta dán nhãn cho tất cả các đỉnh của đồ thị là 0. Chọn một đỉnh v thuộc tập V để bắt đầu duyệt. Gán nhãn đỉnh v này la 1v đã được duyệt. Chọn đỉnh u trong tập V kề với đỉnh v mà nhãn là 0. Duyệt qua đỉnh u và gán nhãn u là 1. Tiếp tục quá trình duyệt đến khi tất cả các đỉnh đồ thị có nhãn là 1.
Chương 5: Giải thuật đồ thị 5.1 Cấu trúc lưu trữ đồ thị d anh sách kề 5.2 Tìm kiếm đồ thị 5.3 Cây bao trùm ngắn 5.4 Sắp xếp tôpô 5.1 Lưu trữ danh sách kề Danh sách đỉnh v1, v2, , Danh sách kề đỉnh Adj(vi) , i=1 n A B C B A C C A B D A F E A C F C D D E D A E E F B C F 5.2 Tìm kiếm đồ thị Tìm kiếm ưu tiên chiều sâu Tìm kiếm ưu tiên chiều rộng Tìm đường ngắn Kí hiệu: V(G)=tập đỉnh G, E(G)=tập cạnh G Hàm Color(u) trạng thái đỉnh trình tìm kiếm Color(u) nhận giá trị : WHITE, GRAY, BLACK Lúc đầu, Color(u)=WHITE nghĩa chưa xét, với đỉnh u bắt đầu xét, Color(u)=GRAY, u xét xong Color(u)=BLACK Nội dung toán tìm kiếm Cho đồ thị G=(V,E) đỉnh s Xuất phát từ đỉnh s, duyệt qua tất đỉnh đồ thị Kí hiệu: V(G)=tập đỉnh G, E(G)=tập cạnh G Hàm Color(u) trạng thái đỉnh trình tìm kiếm Color(u) nhận giá trị : WHITE, GRAY, BLACK Lúc đầu, Color(u)=WHITE nghĩa chưa xét, với đỉnh u bắt đầu xét, Color(u)=GRAY, u xét xong Color(u)=BLACK 5.2.1 Tìm kiếm ưu tiên chiều sâu (DFS) Thủ tục đệ quy: Procedure DFS(G) {Khởi tạo: Mọi đỉnh u chưa xét } for each u ∈ V[G] color[u]:= WHITE ; for each đỉnh u ∈ V[G] if color[u] = WHITE then DFS-Visit (u) Procedure DFS-Visit (u) color[u] := GRAY for each v ∈ Adj[u] if color[v] =WHITE then DFS-Visit (v) color[u]:= BLACK Tìm kiếm ưu tiên chiều sâu (DFS) Thủ tục không đệ quy: Procedure DFS(G,s) 1.For each u in V[G] color[u]:= WHITE ; 2.color[s]:=GRAY; 3.Push(s,Stack) 4.While Stack # ∅ u:= Pop(Stack); if có v∈ Adj(u) and color(v)=WHITE then color(v):=GRAY ; Push(v,Stack); else color(u):=BLACK; 9.end; CHÚ Ý: Hàm Push(v,Stack) đặt phần tử v vào đỉnh ngăn xếp Stack Hàm Pop(Stack) lấy phần tử đửng đỉnh ngăn xếp khỏi ngăn xếp Ví dụ: DFS(A) D A E B A A Adj(v)∩ Trắng B,C,D,E A,B B C C,D,E,F A,B,C C E,F D,E,F A,B,C,E E A,B,C C F A,B,C,F F D A,B,C,F, D D D A,B,C,F F F A,B,C C C A,B B B A A A Stack (Sám) C F Rỗng v Đỉnh trắng B,C,D,E,F D,F Đỉnh đen E D Ví dụ: DFS(A) (tiếp) D A D A E E B F C B D A C E F C B F C D A E B D A E F B C D A E F B C F Ví dụ: DFS(A) (tiếp) D A D A E B C D A E B F E C D E E C F C A D A B B F F B C F 5.3.2 Tìm kiếm ưu tiên chiều rộng (BFS) 10 11 Procedure BFS(G,s) for each u ∈ V[G] color[u]:= WHITE;Prev(u)=Null; color[s]:=GRAY; Q:= {s} While Q # ∅ u:= Head(Q); /*lấy u phần tử đứng đầu hàng đợi để xét*/ For each v ∈ Adj(u) if color(v)= WHITE then color(v):=GRAY; Prev(v):= u; ENQUEUE(Q,v);/*đặt v vào cuối hàng đợi*/ DeQueue(Q,u);/* Gỡ u khỏi hàng đợi */ Color(u):= BLACK; 10 Ví dụ: Giải thuật PRIM Bổ sung loại bỏ cạnh đươc xét Bổ sung cạnh AB,AC,AD,AF BE,BD AB AF FC,FG GC,GD,GE FG AC CD CD GE Bổ sung đỉnh A B A B 12 9 E D F C 10 11 G F G C D E Đủ đỉnh 23 Giải thuật PRIM (tiếp) A F B 12 C 10 D 11 E G A E G F A F G A F B 12 C 10 D 11 G B 12 C 10 D 11 E E G F B 12 C 10 D 11 E B 12 C 10 D 11 A A F B 12 C 10 D 11 E G 24 Đặc trưng giải thuật PRIM Trong trình xây dựng , T G Khi T chứa tất đỉnh G, T trở thành bao trùm G 25 Giải thuật KRUSKAL Mô tả ngôn ngữ tự nhiên V’:={}, E’={} (rỗng); m’=0; While m’ < n-1 Begin Chọn cạnh (u,v) có ϕ(u,v) nhỏ cho thêm vào E’ T chu trình E’:= E’ ∪ {(u,v)} ; m’:=m’+1; End; 26 Giả mã giải thuật KRUSKAL Procedure KRUSCAL A:= ∅ For each u in V(G) Make-Set(u); Sắp xếp cạnh E(G) theo số không giảm w; For each (u,v) in E(G) if Find-Set(u) Find-Set(v) then A:= A U (u,v); Union(u,v); Chú ý: A rừng trình xây dựng Make_Set(u) thủ tục tạo tập gồm phần tử u; Hàm File-Set(u) tìm tập hợp có chứa phần tử u Thủ tục Union(u,v) thực phép hợp hai tập chứa u v 27 Giải thuật Kruskal - Ví dụ B E A D F C 8 G Cạnh xét Các rừng Chọn AB(3) {A},{B},{C},{D},{E}, {F}, {G} AB AD(4) {A,B},{D},{C},{E},{F}, {G} AD FG(4) {A,B,D}, {C},{E},{F},{G} FG BD(5) {A,B,D}, {C},{E},{F,G} CF(6) {A,B,D}, {C},{E},{F,G} CF AF(6) {A,B,D}, {E},{C,F,G} AF AC(7) {A,B,D,C,F,G}, {E} DG(8) {A,B,D,C,F,G}, {E} EG(8) {A,B,D,C,F,G}, {E} EG DC(9) {A,B,D,C,F,G,E} BE(9) {A,B,D,C,F,G,E} 28 Giải thuật KRUSKAL: Ví dụ A B D F C E G Trong trình xây dựng T chu trình nên rừng 29 Đặc điểm giải thuật KRUSKAL Trong trình xây dựng T có không? Trong trình xây dựng T chu trình nên rừng, không Khi cạnh (u,v) tạo thành chu trình với cạnh có T ? Khi hai đầu mút u, v thuộc T 30 6.4 Sắp xếp tô pô Bài toán: Cho đồ thị có hướng, xếp đỉnh đường thẳng cho cạnh hướng từ trái sang phải A D B C A E B D C E F F 31 Giải thuật xếp tôpô Ngôn ngữ tự nhiên mô tả thuật toán tìm xếp tôpô G=(V,E) sau: Nếu đỉnh G có bậc vào >0 G xếp tôpô Nếu v ∈ V(G) có bậc vào (không có cạnh vào) đặt đầu danh sách, xóa v cạnh xuất phát từ v khỏi G G’ Tiếp tục làm với G’ 32 Sắp xếp tôpô – Ví dụ A D B C A F E D B C B F E D C E D C F F E E F C F E F 33 Tìm bao trùm theo chiều sâu Chọn đỉnh v0 cho vào T Xét đỉnh v cho vào T chưa xét xong: Nếu có đỉnh u kề với v chưa nằm T bổ xung cạnh (v,u) đỉnh u vào T; thay v u để tiếp tục xét đỉnh u với v; Nếu tất đỉnh kề với v nằm T đỉnh v xét xong quay lại xét đỉnh đứng trước v trình tìm kiếm Nếu đỉnh v0 xét xong dừng 34 Ví dụ A F Xét Bổ xung cạnh đỉnh π(v) A (AB), đỉnh B π(B)=A B (BD), đỉnh D π(D)=B D (DC), đỉnh C π(C)=D C (CF), đỉnh F π(F)=C F Không còn,quay lại C C Không còn, quay lại D D (CG), đỉnh G G (GE), đỉnh E B C D E G A F B C D E G 35 Tìm bao trùm theo chiều rộng A Xét Bổ xung cạnh Số cạnh đỉnh A (AB),(AC),(AD),(AF) đỉnh B,C,D,F B (BE), đỉnh E F B D E (DG), đỉnh G G A C D C F B C D E G 36 Hết chương 37 ... m cạnh Hàm trọng số ϕ: E → R+ OUTPUT: T= bao trùm nhỏ Giải thuật Prim Giải thuật Kruskal 20 Giải thuật Prim Mô tả ngôn ngữ tự nhiên /*Khởi tạo: đỉnh chưa xét*/ V’:={s},... Giả mã giải thuật DIJSKTRA Giả mã- Khởi tạo For each v in V(G) L(v):= +∞ ; Pre(v):= Null; Q:=V(G); L(s)= 0; Chú giải: Hàm Q hàng đợi ưu tiên lúc đầu gồm tất đỉnh G 16 Giải thuật DIJSKTRA... xét xong Color(u)=BLACK Nội dung toán tìm kiếm Cho đồ thị G=(V,E) đỉnh s Xuất phát từ đỉnh s, duyệt qua tất đỉnh đồ thị Kí hiệu: V(G)=tập đỉnh G, E(G)=tập cạnh G Hàm Color(u)