Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 14 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
14
Dung lượng
168,23 KB
Nội dung
ðồ thị (Graph)(Graph) Lê Sỹ Vinh Bộ môn Khoa Học Máy Tính – Khoa CNTT ðại Học Công Nghệ - ðHQGHN Email: vinhioi@yahoo.com Đồthị (graph) • G = (V, E) – V: Tập ñỉnh – E = { (u,v) | u, v ∈ V}: Tập cạnh Ví dụ: Biểu diễn bản ñồ ñường ñi trong thành phố bằng ñồ thị G = (V, E) – V: Tập hợp các ñiểm trong thành phố – E: Tập hợp các ñường ñi trong thành phố, mỗi ñường ñi nối hai ñiểm ði qua ñồ thị theo chiều rộng (Breadth first search) • ði qua tất cả các ñỉnh của ñồ thị, mỗi ñỉnh ñúng một lần • Bắt ñầu xuất phát từ một ñỉnh s, lần lượt thăm các ñỉnh liền kề với s. Tiếp tục quá trình thăm các ñỉnh theo nguyên tắc: ðỉnh nào ñược thăm trước thì các ñỉnh liền kề với ñỉnh ñó sẽ ñược thăm trước • Xem ví dụ http://www.cs.princeton.edu/~wayne/cs423/lectures.html ði qua ñồ thị theo chiều sâu (Depth first search) //ði qua ñồ thị theo chiều sâu xuất phát từ v DepthFirstSearch (v) { for (mỗi ñỉnh u kề với v) if (u chưa ñược thăm) { thăm u và ñánh dấu u ñã ñược thăm DepthFirstSearch (u) } } Xem ví dụ http://www.cs.princeton.edu/~wayne/cs423/lectures.html Sắp xếp topo Cho ñồ thị có hướng nhưng không có chu trình G = (V, E) (Directed acylic graph / DAG) 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,v) ∈ E, thì đỉnh u uu u phải đứng trước đỉnh v vv v . G A B C F E D Sắp xếp topo TopoSort (u) { ðánh dấu u ñã thăm; for (mỗi ñỉnh v kề u) if ( v chưa thăm) TopoSort(v); Xen u vào ñầu danh sách T; } //Sắp xếp các ñỉnh của ñồ thị ñịnh hướng //không có chu trình G =(V,E) thành danh sách topo. TopoSortGraph(G) { for (mỗi ñỉnh u ∈ V) ðánh dấu u chưa ñược thăm; Khởi tạo danh sách topo T rỗng; for (mỗi ñỉnh u ∈ V) if (u chưa thăm) TopoSort (u); } ðường ñi giữa hai ñiểm Cho ñồ thị G = (V, E) Giữa hai ñỉnh (x 0 , x k ) có ñường ñi, nếu tồn tại (x 1 ,…,x k-1 ) thỏa mãn (x i , x i+1 ) ∈ E, ∀i = 0…(k-1) ðồ thị liên thông (Connected graph) Cho ñồ thị G = (V, E), G ñược gọi là liên thông nếu tồn tại ñường ñi giữa hai ñỉnh bất kì của ñồ thị Tìm tất cả các thành phần liên thông Cho ñồ thị G = (V, E), tìm tất cả các thành phần liên thông của ñồ thị. ðỉnh i của ñồ thị ñược gán nhãn c i cho biết thuộc miền liên thông c i . Tìm các thành phần liên thông //ði qua ñồ thị theo bề rộng xuất phát từ v FindConnectedComponent (v, ci) { (1) Khởi tạo hàng ñợi Q rỗng; (2) Xen v vào hàng ñợi Q; (3) ðánh dấu ñỉnh v ñã ñược thăm, và gán nhãn v bằng ci (4) while (hàng ñợi Q không rỗng) { (5) Lấy ñỉnh w ở ñầu hàng ñợi Q;(5) Lấy ñỉnh w ở ñầu hàng ñợi Q; (6) for (mỗi ñỉnh u kề w) (7) if ( u chưa ñược thăm) { (8) Xen u vào ñuôi hàng ñợi Q; (9) ðánh dấu u ñã ñược thăm, và gán nhãn u bằng ci } (10) 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 liên thông // Tìm các thành ph n liên thông c a ñ th G=(V, E) FindAllConnectedComponent (G) { (10 ) for (m i v ∈V) (11 ) ðánh d u v chưa ñư c thăm; (12 ) ci = 0; (13 ) for (m i v ∈V) (14 ) if (v chưa ñư c thăm) { (15 ) FindConnectedComponent(v, ci); (16 ) ci = ci + 1 } } ðư ng ñi ng n nh t Cho ñ th G=(V, E), c nh (u, v) ∈ E có ñ dài weight (u,v) > 0 Tìm ñư ng ñi ng n nh t t ñ nh s ñ... t i bư c i tìm ñ nh u ∈ unknown có kho ng cách nh nh t if u = e then k t thúc else { known = known ∪ {u} unknown = unknown – {u} Dùng u ñ s a nhãn cho các ñ nh thu c t p unknown ti n hành bư c th (i + 1) } Dijkstra Algorithm { Known = {s}; Unknown = {E} – {s} for v ∈ unknown { dist[v] = weight [s, v]; pre[v] = s; } u = s; // at the first step while (u != e ){ ch n u sao cho dist[u] = min {dist[x] | . ñiểm Cho ñồ thị G = (V, E) Giữa hai ñỉnh (x 0 , x k ) có ñường ñi, nếu tồn tại (x 1 ,…,x k -1 ) thỏa mãn (x i , x i +1 ) ∈ E, ∀i = 0…(k -1 ) ðồ thị liên thông. (10 ) for (mỗi v ∈V) (11 ) ðánh dấu v chưa ñược thăm; (12 ) ci = 0; (13 ) for (mỗi v ∈V) (14 ) if (v chưa ñược thăm) { (15 ) FindConnectedComponent(v, ci); (16 )