Bài giảng lý thuyết đồ thị chương 3 ts lê nhật duy

26 0 0
Bài giảng lý thuyết đồ thị chương 3   ts  lê nhật duy

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương 3: Tìm kiếm đồ thị Nội dung I Duyệt đồ thị theo chiều sâu II Duyệt đồ thị theo chiều rộng III Tìm đường IV Kiểm tra tính liên thơng Chương – Tìm kiếm đồ thị Lý thuyết đồ thị I Duyệt đồ thị theo chiều sâu ™Giới thiệu ƒ Duyệt đồ thị trình qua tất đỉnh đồ thị cho đỉnh viếng thăm lần ƒ Duyệt theo chiều sâu (Depth First Search – DFS) ƒ Duyệt theo chiều rộng (Breadth First Search – BFS) Chương – Tìm kiếm đồ thị I Duyệt đồ thị theo chiều sâu ™Nguyên lý ƒ Bắt đầu tìm kiếm từ đỉnh v đồ thị ƒ Sau chọn u đỉnh tùy ý kề với v (với đồ thị có hướng u đỉnh sau, v đỉnh đầu cung uv) ƒ Lặp lại trình với u khơng tìm đỉnh kề trở đỉnh trước đỉnh mà khơng thể tiếp để tìm qua nhánh khác Chương – Tìm kiếm đồ thị I Duyệt đồ thị theo chiều sâu Thứ tự duyệt: dcba gkl h fm e Chương – Tìm kiếm đồ thị I.1 Cài đặt đệ quy B1: Lấy s đỉnh đồ thị B2: Đặt v = s B3: Duyệt đỉnh v B4: Nếu ∀ đỉnh kề v duyệt, đặt v=đỉnh duyệt trước đỉnh v, Nếu v = s đến Bước 6, ngược lại trở lại Bước B5: Chọn u đỉnh kề chưa duyệt v, đặt v = u, trở lại Bước B6: Kết thúc Chương – Tìm kiếm đồ thị I.1 Cài đặt đệ quy ™ Cài đặt mã giả /* Khai báo biến ChuaXet, Ke */ DFS(v) { Duyệt đỉnh (v); ChuaXet[v] = 0; /*Đánh dấu xét đỉnh v*/ for ( u ∈ Ke(v) ) if ( ChuaXet[u] ) DFS(u); }; void main() { /* Nhập đồ thị, tạo mảng Ke */ for (v ∈ V) ChuaXet[v] = 1; /* Khởi tạo cờ cho đỉnh */ for (v ∈ V) if ( ChuaXet[v] ) DFS(v); } Chương – Tìm kiếm đồ thị I.2 Cài đặt khơng đệ quy ™ Thuật tốn B1: Lấy s đỉnh đồ thị B2: Đặt s vào STACK B3: Nếu STACK rỗng đến B4: Lấy đỉnh p từ STACK B5: Duyệt đỉnh p B6: Đặt đỉnh kề p chưa xét (chưa có mặt STACK) vào STACK, trở lại B7: Kết thúc Chương – Tìm kiếm đồ thị I.Duyệt đồ thị theo chiều sâu ™Ý nghĩa ƒ ƒ ƒ ƒ Kiểm tra đường đỉnh Chia đồ thị thành thành phần liên thông Xây dựng khung đồ thị Kiểm tra xem đồ thị có chu trình hay khơng Chương – Tìm kiếm đồ thị Nội dung I Duyệt đồ thị theo chiều sâu II Duyệt đồ thị theo chiều rộng III Tìm đường IV Kiểm tra tính liên thơng Chương – Tìm kiếm đồ thị 10 Lý thuyết đồ thị II Duyệt đồ thị theo chiều rộng Thứ tự duyệt: d e c b f a g m h k l Chương – Tìm kiếm đồ thị 12 II.1 Cài đặt hàng đợi B1: Lấy s đỉnh đồ thị B2: Đặt s vào QUEUE B3: Lặp QUEUE chưa rỗng a.Lấy đỉnh p từ QUEUE b.Duyệt đỉnh p c.Đặt đỉnh kề p chưa xét (chưa có mặt QUEUE) vào QUEUE d.Kết thúc lặp Chương – Tìm kiếm đồ thị 13 II.1 Cài đặt hàng đợi /* Khai báo biến ChuaXet, Ke */ BFS(v) { QUEUE = ∅; QUEUE ⇐ v; ChuaXet[v] = 0;/*Đánh dấu xét đỉnh v*/ while ( QUEUE ≠ ∅ ) { p ⇐ QUEUE; Duyệt đỉnh p; for ( u ∈ Ke(p) ) if ( ChuaXet[u] ) { QUEUE ⇐ u; ChuaXet[u] = 0;/*Đánh dấu xét đỉnh */ } } } void main() /* Nhập đồ thị, tạo biến Ke */ { for ( v ∈ V ) ChuaXet[v] = 1; /* Khởi tạo cờ cho đỉnh */ for ( v ∈ V ) if ( ChuaXet[v] ) BFS(v); } Chương – Tìm kiếm đồ thị 14 II.2 Cài đặt thuật tốn loang Chương – Tìm kiếm đồ thị 15 II.2 Cài đặt thuật toán loang ™ Bước 1: Khởi tạo ƒ Bắt đầu từ đỉnh s Đánh dấu đỉnh s, đỉnh khác s đầu chưa bị đánh dấu ƒ X = {s}, Y = Ø ™ Bước 2: Lặp lại X= Ø ƒ Gán Y= Ø ƒ Với đỉnh u ∈ X • Xét tất đỉnh v kề với u mà chưa bị đánh dấu Với đỉnh đó: – Đánh dấu v – Lưu đường đi, đỉnh liền trước v đường từ s Ỉ v u – Đưa v vào tập Y ƒ Gán X = Y Chương – Tìm kiếm đồ thị 16 II Duyệt đồ thị theo chiều rộng ™Ý nghĩa ƒ ƒ ƒ ƒ Kiểm tra đường đỉnh Chia đồ thị thành thành phần liên thông Xây dựng khung đồ thị Tìm đường ngắn từ đỉnh đến đỉnh lại Chương – Tìm kiếm đồ thị 17 Nội dung I Duyệt đồ thị theo chiều sâu II Duyệt đồ thị theo chiều rộng III Tìm đường IV Kiểm tra tính liên thơng Chương – Tìm kiếm đồ thị 18 Lý thuyết đồ thị III Tìm đường ™Bài toán ƒ Cho đồ thị G, s t hai đỉnh tùy ý đồ thị Hãy tìm đường từ s đến t ™Phương pháp ƒ Bắt đầu từ đỉnh s, Sử dụng DFS BFS để duyệt đồ thị • Tìm thấy ChuaXet(t) = • Khơng tìm thấy ChuaXet(t) = ƒ Sử dụng thêm mảng Truoc[] để lưu vết Chương – Tìm kiếm đồ thị 19 III.1 Tìm đường theo chiều sâu /* Khai báo biến ChuaXet, Ke */ DFS(v); { Duyệt đỉnh (v); ChuaXet[v] = 0; for ( u ∈ Ke(v) ) if ( ChuaXet[u] ) { Truoc[u] = v; /* Lưu vết*/ DFS(u); } } main() // Nhập đồ thị, tạo biến Ke { for ( v ∈ V ) ChuaXet[v] = 1; // Khởi tạo cờ cho đỉnh DFS(s); } Chương – Tìm kiếm đồ thị 20 III.2 Tìm đường theo chiều rộng /* Khai báo biến ChuaXet, Ke , QUEUE */ BFS(v); { QUEUE = ∅; QUEUE ⇐ v; ChuaXet[v] = 0; while ( QUEUE ≠ ∅ ) { p ⇐ QUEUE; Duyệt đỉnh p; for ( u ∈ Ke(p) ) if ( ChuaXet[u] ) { QUEUE ⇐ u; ChuaXet[u] = 0; Truoc[u] = p;/*Lưu vết*/ } } } main() // Nhập đồ thị, tạo biến Ke { for ( v ∈ V ) ChuaXet[v] = 1; // Khởi tạo cờ cho đỉnh BFS(s); } Chương – Tìm kiếm đồ thị 21 III.2 Tìm đường theo chiều rộng Khơi phục đường từ s đến t s Ỉ x1 Ỉ x2 Ỉ … Ỉ xn Ỉ t Cài đặt: v = t; while (v != s) { printf (v); v = Truoc[v]; } Chương – Tìm kiếm đồ thị 22 Nội dung I Duyệt đồ thị theo chiều sâu II Duyệt đồ thị theo chiều rộng III Tìm đường IV Kiểm tra tính liên thơng Chương – Tìm kiếm đồ thị 23 Lý thuyết đồ thị IV Kiểm tra tính liên thơng ™Bài tốn ƒ Tính số thành phần liên thơng đồ thị, xác định đỉnh thuộc thành phần liên thông ™Phương pháp ƒ Sử dụng DFS BFS ƒ Biến inconnect đếm số thành phần liên thông đồ thị ƒ Mảng index[] lưu số thành phần liên thơng Chương – Tìm kiếm đồ thị 24 IV.1 Tìm theo chiều sâu /* Khai báo biến ChuaXet, Ke, index*/ DFS(v); { Duyệt đỉnh (v); index[v] = inconnect; ChuaXet[v] = 0; for ( u ∈ Ke(v) ) if ( ChuaXet[u] ) DFS(u); } main() { /* Nhập đồ thị, tạo biến Ke */ for ( v ∈ V ) ChuaXet[v] = 1; /* Khởi tạo cờ cho đỉnh */ inconnect = 0; for ( v ∈ V ) if ( ChuaXet[v] ) { inconnect ++; DFS(v); } } Chương – Tìm kiếm đồ thị 25 IV.2 Tìm theo chiều rơng /* Khai báo biến toàn cục ChuaXet, Ke, QUEUE, index */ BFS(v) { QUEUE = 0; QUEUE ⇐ v; ChuaXet[v] = 0; while ( QUEUE ≠ ) { p ⇐ QUEUE; Duyệt đỉnh p; index[p] = inconnect; for ( u ∈ Ke(p) ) if ( ChuaXet[u] ) { QUEUE ⇐ u;ChuaXet[u] = 0; } } } main() { for ( v ∈ V ) ChuaXet[v] = 1; inconnect = 0; for ( v ∈ V ) if ( ChuaXet[v] ) { inconnect + + ; BFS(v); } } Chương – Tìm kiếm đồ thị 26

Ngày đăng: 25/07/2023, 16:02

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan