Duyệt theo chiều rộng (Bredth First Search)

Một phần của tài liệu Giáo trình cấu trúc dữ liệu và giải thuật cđn công nghiệp hà nội (Trang 132 - 136)

3. Các phép duyệt đồ thị

3.2. Duyệt theo chiều rộng (Bredth First Search)

Xuất phát từ một đỉnh v được thăm đầu tiên, nhưng khác với DFS tiếp theo là các đỉnh chưa được thăm mà kề với v sẽ được thăm kế tiếp nhau và một phép duyệt theo chiều rộng xuất phát từ các đỉnh kề với v vừa được thăm lại được thực hiện,… khi hết các đỉnh kề với một đỉnh đã được thăm thì được chuyển sang đỉnh kề khác. Phép duyệt theo nguyên tắc này được gọi là duyệt theo chiều rộng.

Phép duyệt sẽ kết thúc khi không có một đỉnh nào kề với đỉnh đã được thăm mà chưa được thăm.

Giả thiết, với đồ thị hình 7.9 và đỉnh xuất phát là v1, thì phép duyệt theo chiều rộng sẽ được một dãy các đỉnh sau: v1, v2, v3 rồi đến v4, v5 tiếp theo v7, v6.

3.2.1. Giải thuật.

Ta cũng dùng một mảng mart gồm n phần tử tương ứng với n đỉnh của đồ thị. Khởi đầu gán giá trị 0 cho tất cả các phần tử của mảng, mỗi khi có một đỉnh i được thăm ta sẽ gán mart[i]=1.

Giải thuật BFS (Bredth First Search) có thể cài đặt không đệ qui bằng cách dùng thêm một Queue để lưu các đỉnh cần được thăm.

Giải thuật được mô tả bằng hàm BFS như sau: void BFS(int v)

{

Khởi tạo hàng đợi Q chèn v vào hàng đợi Q

đánh dấu đã thăm v: mart[i]←1. while (Q ≠ )

{ lấy đỉnh v ra khỏi Q for mỗi đỉnh w kề với v

if (mart[w]==0)

đưa v vào hàng đợi Q

đánh dấu đã thăm w: mart[w]←1. }

}

3.2.2. Ứng dụng của giải thuật.

Nhiều giải thuật sử dụng giải thuật duyệt theo chiều rộng:

- Tìm tất cả các đỉnh trong trong một thành phần liên thông - Bài toán tìm đường đi ngắn nhất

131 - …

132

CÂU HỎI VÀ BÀI TẬP CUỐI CHƯƠNG 7

1) Trình bày khái niệm đồ thị định hướng, đồ thị không định hướng 2) Trình bày các khái niệm đường đi, chu trình, liên thông

3) Hãy nêu một số cách biểu diễn đồ thị mà mình biết và đưa ra nhận xét về ưu điểm và hạn chế của từng cách.

4) Cho đồ thị không định hướng G1 như hình 7.10 sau:

a. Hãy cho biết đồ thị thuộc loại nào (định hướng, vô hướng, liên thông, không liên thông)?

b. Hãy lập ma trận lân cận của G1.

c. Hãy lập Danh sách các đỉnh kề của G1.

d. Duyệt đồ thị G1 theo chiều sâu bắt đầu từ A, B, D. e. Duyệt đồ thị G1 theo chiều rộng bắt đầu từ A, B, D. 5) Cho đồ thị định hướng G2 như hình 7.11 sau:

Hình 7.10: Đồ thị G1 A B E F C D G Hình 7.11: Đồ thị G2 A B E F C D G

133

a. Hãy cho biết đồ thị thuộc loại nào (định hướng, vô hướng, liên thông, không liên thông)?

b. Hãy lập ma trận kề (lân cận) của G1 c. Hãy lập Danh sách các đỉnh kề của G1 d. Duyệt đồ thị G1 theo chiều sâu bắt đầu từ A. e. Duyệt đồ thị G1 theo chiều sâu bắt đầu từ A.

6) Cài đặt đồ thị G1 bằng ma trận kề rồi viết các giải thuật: a. Duyệt theo chiều sâu.

b. Duyệt theo chiều rộng.

7) Cài đặt đồ thị G2 bằng danh sách các đỉnh kề rồi viết các giải thuật: a. Đưa ra màn hình các đỉnh kề với từng đỉnh của đồ thị

b. Duyệt theo chiều sâu. c. Duyệt theo chiều rộng.

8) Hãy viết một ứng dụng có sử dụng giải thuật duyệt theo chiều rộng để kiểm tra tính liên thông của một đồ thị bất kỳ và đưa ra thông báo về số lượng thành phần liên thông của đồ thị

134

PHỤ LỤC Phụ lục 1

Biến con trỏ và cấp phát động

Một phần của tài liệu Giáo trình cấu trúc dữ liệu và giải thuật cđn công nghiệp hà nội (Trang 132 - 136)

Tải bản đầy đủ (PDF)

(186 trang)