Cho đồ thị vô hướng G = (V, E), khẳng định nào dưới đây là đúng?
A.
Thuật toán BFS(u) duyệt tất cả các thành phần liên thông của đồ thị
B.
Thuật toán BFS(u) luôn tìm ra được đường đi giữa hai đỉnh bất kì của đồ thị
C.
Thuật toán BFS(u) duyệt tất cả các đỉnh của đồ thị trong cùng thành phần liên thông với đỉnh u
D.
Thuật toán BFS(u) duyệt tất cả các đỉnh của đồ thị mỗi đỉnh đúng một lần
Trả lời:
Đáp án đúng: C
Thuật toán BFS (Breadth-First Search) hay còn gọi là tìm kiếm theo chiều rộng, bắt đầu từ một đỉnh u và duyệt tất cả các đỉnh kề với u trước, sau đó duyệt các đỉnh kề với các đỉnh vừa duyệt. Do đó, BFS(u) sẽ duyệt tất cả các đỉnh nằm trong cùng thành phần liên thông với đỉnh u.
- Phương án A sai vì BFS(u) chỉ duyệt thành phần liên thông chứa u, không duyệt tất cả các thành phần liên thông của đồ thị nếu đồ thị không liên thông.
- Phương án B sai vì BFS(u) chỉ tìm đường đi giữa hai đỉnh nếu chúng thuộc cùng một thành phần liên thông. Nếu hai đỉnh không thuộc cùng thành phần liên thông thì không có đường đi giữa chúng.
- Phương án C đúng vì BFS(u) duyệt tất cả các đỉnh của đồ thị trong cùng thành phần liên thông với đỉnh u theo đúng định nghĩa và cách hoạt động của thuật toán BFS.
- Phương án D sai vì nếu đồ thị có chu trình, BFS(u) có thể duyệt một số đỉnh nhiều lần nếu không có cơ chế đánh dấu đỉnh đã duyệt. Tuy nhiên, thuật toán BFS thường sử dụng một mảng để đánh dấu các đỉnh đã được duyệt, đảm bảo mỗi đỉnh chỉ được duyệt một lần trong cùng một lần gọi BFS(u). Mặc dù vậy, phương án C vẫn chính xác hơn vì nó tập trung vào mục đích chính của BFS là duyệt thành phần liên thông.





