Bài giảng Lý thuyết đồ thị: Chương 3 - Nguyễn Trần Phi Phượng
lượt xem 5
download
Bài giảng Lý thuyết đồ thị: Chương 3 - Các thuật toán tìm kiếm trên đồ thị và ứng dụng của Nguyễn Trần Phi Phương sau đây trình bày về tìm kiếm theo chiều sâu trên đồ thị; tìm kiếm theo chiều rộng trên đồ thị; tìm đường đi và kiểm tra tính liên thông.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Lý thuyết đồ thị: Chương 3 - Nguyễn Trần Phi Phượng
- Chương 3 CÁC THUẬT TOÁN TÌM KIẾM TRÊN ĐỒ THỊ VÀ ỨNG DỤNG
- 3.1 Tìm kiếm theo chiều sâu trên đồ thị Depth First Search B1. Xuất phát từ 1 đỉnh cho trước nào đó. B2. Xử lý đỉnh này và đánh dấu để không xử lý lần sau. B3. Đưa tất cả các đỉnh kề với nó vào danh sách xử lý và chọn 1 đỉnh để xử lý tiếp theo. B4. Quay lại B2 cho đến khi không còn đỉnh trong danh sách. VD: Bắt đầu từ 1. Đưa các đỉnh kề với 1 vào DS: 2, 4, 5 1 2 3 Chọn 2 để xử lý. Đưa các đỉnh kề với 2 vào DS: 3, 4, 5, … Thứ tự: 1 2 3 5 4 6 4 5 6 17/03/2011 Lý thuyết đồ thị 2
- 3.1 Tìm kiếm theo chiều sâu trên đồ thị Phân tích: – Dùng cấu trúc Stack – Sử dụng mảng đánh dấu là mảng 1 chiều: • int danhdau[maxV]; • Quy ước: – danhdau[i] = 0; đỉnh i chưa được xét – danhdau[i] = 1; đỉnh i đã được xét 17/03/2011 Lý thuyết đồ thị 3
- 3.1 Tìm kiếm theo chiều sâu trên đồ thị void DFS(DOTHI g, int s) // s la dinh xuat phat { int danhdau[maxV]; Stack st; //Khoi tao for (int i = 1; i
- 3.1 Tìm kiếm theo chiều sâu trên đồ thị 1 2 3 Đưa 1 vào Stack Lấy 1 ra xử lý, đưa 5, 4, 2 vào Stack Lấy 2 ra xử lý, đưa 5, 3 vào Stack Lấy 3 ra xử lý, đưa 6, 5 vào Stack 6 4 5 Lấy 5 ra xử lý, đưa 4 vào Stack Lấy 4 ra xử lý. Không đưa gì vào Stack 5 4 Lấy 6 ra xử lý. Không đưa gì vào Stack 3 6 5 2 Stack Lấy 5 ra. Không xử lý (vì đã xử lý rồi) 4 Lấy 4 ra. Không xử lý 1 5 Lấy 5 ra. Không xử lý Thứ tự duyệt: 1 2 3 5 4 6 17/03/2011 Lý thuyết đồ thị 5
- 3.1 Tìm kiếm theo chiều sâu trên đồ thị Áp dụng DFS, hãy thể hiện thứ tự duyệt các đỉnh trong đồ thị sau: u 0 t v s x Đáp án: 0 1 2 3 4 9 5 6 7 8 10 Đáp án: t u s v Đỉnh x không được duyệt 17/03/2011 Lý thuyết đồ thị 6
- 3.2 Tìm kiếm theo chiều rộng trên đồ thị Breadth First Search B1. Xuất phát từ 1 đỉnh cho trước nào đó. B2. Xử lý đỉnh này và đánh dấu để không xử lý lần sau. B3. Đưa tất cả các đỉnh kề với nó vào danh sách xử lý và lần lượt xử lý các đỉnh kề với đỉnh đang xét. B4. Quay lại B2 cho đến khi không còn đỉnh trong danh sách. VD: Bắt đầu từ 1. Đưa các đỉnh kề với 1 vào DS: 2, 4, 5 1 2 3 Chọn 2 để xử lý. Đưa các đỉnh kề với 2 vào DS: 3, 4, 5, … Thứ tự: 1 2 4 5 3 6 4 5 6 17/03/2011 Lý thuyết đồ thị 7
- 3.2 Tìm kiếm theo chiều rộng trên đồ thị Phân tích: – Dùng cấu trúc Queue – Sử dụng mảng đánh dấu là mảng 1 chiều: • int danhdau[maxV]; • Quy ước: – danhdau[i] = 0; đỉnh i chưa được xét – danhdau[i] = 1; đỉnh i đã được xét 17/03/2011 Lý thuyết đồ thị 8
- 3.2 Tìm kiếm theo chiều rộng trên đồ thị void BFS(DOTHI g, int s) // s la dinh xuat phat { int danhdau[maxV]; Queue q; //Khoi tao for (int i = 1; i
- 3.2 Tìm kiếm theo chiều rộng trên đồ thị 1 2 3 Đưa 1 vào Queue Lấy 1 ra xử lý, đưa 2, 4, 5 vào Queue Lấy 2 ra xử lý, đưa 3, 5 vào Queue Lấy 4 ra xử lý, đưa 5 vào Queue 4 5 6 6 Lấy 5 ra xử lý, đưa 3 vào Queue 3 Lấy 3 ra xử lý. Đưa 6 vào Queue 5 Lấy 5 ra. Không xử lý (vì đã xử lý rồi) 5 Queue Lấy 5 ra. Không xử lý 3 Lấy 3 ra. Không xử lý 5 Lấy 6 ra xử lý. Không đưa gì vào Queue 4 1 2 Thứ tự duyệt: 1 2 4 5 3 6 17/03/2011 Lý thuyết đồ thị 10
- 3.2 Tìm kiếm theo chiều rộng trên đồ thị Áp dụng BFS, hãy thể hiện thứ tự duyệt các đỉnh trong đồ thị sau: u 0 t v s x Đáp án: 0 1 3 9 2 4 5 6 8 10 7 Đáp án: t u s v Đỉnh x không được duyệt 17/03/2011 Lý thuyết đồ thị 11
- 3.3 Tìm đường đi và kiểm tra tính liên thông Bài toán tìm đường đi giữa hai đỉnh. Giả sử s và t là hai đỉnh nào đó của đồ thị. Hãy tìm đường đi từ s đến t. Thủ tục DFS(s) (BFS(s)) sẽ cho phép thăm tất cả các đỉnh thuộc cùng một thành phần liên thông với s. Vì vậy, sau khi thực hiện xong thủ tục, nếu danhdau[t]=0 thì không có đường đi từ s đến t. 17/03/2011 Lý thuyết đồ thị 12
- 3.3 Tìm đường đi và kiểm tra tính liên thông Kiểm tra tính liên thông. – Áp dụng cho đồ thị vô hướng – Áp dụng DFS, bắt đầu từ đỉnh bất kỳ, nếu duyệt qua được tất cả các đỉnh thì đồ thị là liên thông – Cụ thể: • Sử dụng thêm biến dem để đếm số đỉnh được duyệt • Nếu duyệt xong mà đếm bằng g.nV (số đỉnh của đồ thị) thì có nghĩa là tất cả các đỉnh được duyệt 17/03/2011 Lý thuyết đồ thị 13
- 3.3 Tìm đường đi và kiểm tra tính liên thông int danhdau[maxV] void DFS_lt(DOTHI g, int s, int &dem) // s la dinh xuat phat { dem++; danhdau[s] = 1; for (int v = 1; v
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lý thuyết đồ thị: Chương 4 - Đồ thị phẳng – Bài toán tô màu đồ thị
21 p | 215 | 28
-
Bài giảng Lý thuyết đồ thị: Chương 1 - ThS. Nguyễn Khắc Quốc
56 p | 142 | 18
-
Bài giảng Lý thuyết đồ thị: Chương 3 - Đồ thị Euler và đồ thị Hamilton
19 p | 148 | 16
-
Bài giảng Lý thuyết đồ thị: Chương 2 - Biểu diễn đồ thị trên máy tính
32 p | 119 | 16
-
Bài giảng Lý thuyết đồ thị: Chương 4 - ThS. Nguyễn Khắc Quốc
36 p | 120 | 14
-
Bài giảng Lý thuyết đồ thị: Chương 3 - ThS. Nguyễn Khắc Quốc
67 p | 114 | 13
-
Bài giảng Lý thuyết đồ thị: Chương 5 - Cây và cây khung của đồ thị
37 p | 177 | 12
-
Bài giảng Lý thuyết đồ thị: Chương 2 - ThS. Nguyễn Khắc Quốc
37 p | 115 | 12
-
Bài giảng Lý thuyết đồ thị: Chương 5 - ThS. Nguyễn Khắc Quốc
55 p | 109 | 8
-
Bài giảng Lý thuyết đồ thị: Chương 0 - Giới thiệu môn học
12 p | 102 | 7
-
Bài giảng Lý thuyết đồ thị: Chương 1 - Nguyễn Trần Phi Phượng
26 p | 186 | 7
-
Bài giảng Lý thuyết đồ thị: Bài toán ghép cặp
43 p | 140 | 6
-
Bài giảng Lý thuyết đồ thị - ĐH Hàng Hải
35 p | 96 | 6
-
Bài giảng Lý thuyết đồ thị - Bài 1: Đại cương về đồ thị
39 p | 39 | 5
-
Bài giảng Lý thuyết đồ thị - Bài 3: Đường đi, chu trình Hamilton
34 p | 75 | 5
-
Bài giảng Lý thuyết đồ thị: Chương 0 - Nguyễn Trần Phi Phượng
6 p | 93 | 4
-
Bài giảng Lý thuyết đồ thị: Chương 4 - Nguyễn Trần Phi Phượng
13 p | 120 | 4
-
Bài giảng Lý thuyết đồ thị: Chương 0 - Tôn Quang Toại
6 p | 7 | 4
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn