Duyệt ựồ thị theo chiều rộng (BFS)

Một phần của tài liệu Giáo trình toán rời rạc 2 (Trang 42 - 45)

Giả sử ta có ựồ thị G với các ựỉnh ban ựầu ựược ựánh dấu là chưa duyệt (unvisited). Từ một ựỉnh v nào ựó ta bắt ựầu duyệt như sau: ựánh dấu v ựã ựược duyệt, kế ựến là duyệt tất cả các ựỉnh kề với v. Khi ta duyệt một ựỉnh v rồi ựến ựỉnh w thì các ựỉnh kề của v ựược duyệt trước các ựỉnh kề của w, vì vậy ta dùng một hàng ựể lưu trữ các nút theo thứ tự ựược duyệt ựể có thể duyệt các ựỉnh kề với chúng. Ta cũng dùng mảng một chiều mark ựể ựánh dấu một nút là ựã duyệt hay chưa, tương tự như duyệt theo chiều sâu. Giải thuật duyệt theo chiều rộng ựược viết như sau:

//ựánh dấu chưa duyệt tất cả các ựỉnh

for (v = 1; v<= n; v++) mark[v-1] = unvisited; //n là số ựỉnh của ựồ thị

//duyệt theo chiều rộng từ ựỉnh ựánh số 1 for (v = 1; v<=n; v++)

if (mark[v-1] == unvisited) bfs(v);

Hình 6.1 đồ thị vô hướng

Giả sử bắt ựầu duyệt từ A. Duyệt A, kế ựến duyệt tất cả các ựỉnh kề với A; ựó là B, C, D theo thứ tự ựó. Kế tiếp là duyệt các ựỉnh kề của B, C, D theo thứ tự ựó. Vậy các nút ựược duyệt tiếp theo là F, E,G. Có thể minh hoạ hoạt ựộng của hàng trong phép duyệt trên như sau:

Duyệt A nghĩa là ựánh dấu visited và ựưa nó vào hàng:

A

Kế ựến duyệt tất cả các ựỉnh kề với ựỉnh ựầu hàng mà chưa ựược duyệt; tức là ta loại A khỏi hàng, duyệt B, C, D và ựưa chúng vào hàng, bây giờ hàng chứa các ựỉnh B, C,

D.

B

C

Kế ựến B ựược lấy ra khỏi hàng và các ựỉnh kề với B mà chưa ựược duyệt, ựó là F, sẽ ựược duyệt, và F ựược ựưa vào hàng ựợi.

C

D

F

Kế ựến thì C ựược lấy ra khỏi hàng và các ựỉnh kề với C mà chưa ựược duyệt sẽ ựược duyệt. Không có ựỉnh nào như vậy, nên bước này không có thêm ựỉnh nào ựược duyệt.

D

F

Kế ựến thì D ựược lấy ra khỏi hàng và duyệt các ựỉnh kề chưa duyệt của D, tức là E, G ựược duyệt. E, G ựược ựưa vào hàng ựợi.

F

E

G

Tiếp tục, F ựược lấy ra khỏi hàng. Không có ựỉnh nào kề với F mà chưa ựược duyệt. Vậy không duyệt thêm ựỉnh nào.

E

G

Tương tự như F, E rồi ựến G ựược lấy ra khỏi hàng. Hàng trở thành rỗng và giải thuật kết thúc.

Một phần của tài liệu Giáo trình toán rời rạc 2 (Trang 42 - 45)