BFS - rộng
Ý tưởng của BFS: sử dụng cấu trúc hàng đợi queue. Như vậy, đỉnh vào trước sẽ ra trước
Giải thuật: để ghi nhận trạng thái duyệt các đỉnh của đồ thị, ta sử dụng mảng chuaxet[] gồm n phẩn tử thiết lập giá trị ban đầu là TRUE.
Nếu đỉnh i của đồ thị đã được duyệt, giá trị chuaxet[i] sẽ nhận giá trị FALSE
Thuật toán dừng khi hàng đợi rỗng
Giả mã:
void BFS (int u) {
queue = rỗng;
u ← queue; /*nạp u vào hàng đợi */
chuaxet[u] = FALSE; /*đổi trạng thái của u*/
while (queue ≠ rỗng ) {
/*duyệt tới khi nào hàng đợi rỗng*/
queue ← p; /*lấy p ra từ hàng đợi*/
Thăm_đỉnh(p); /*duyệt xong đỉnh p*/
for (v 'thuộc' ke(p) ) {
/*đưa các đỉnh v kề với p nhưng chua xét vào hàng đợi*/
if (chuaxet[v] ) {
v ← queue; /*đưa v vào hàng đợi*/
chuaxet[v] = FALSE; /*đổi trạng thái của v*/
}
}
} // end while
} //end BFS
Thủ tục BFS sẽ thăm tất cả các đỉnh cùng thành phần liên thông với u. Để thăm tất cả các đỉnh của đồ thị, cần đoạn giả mã sau:
{
for (u=1; u <= n; u++)
chuaxet[u] = TRUE;
for (u thuộc V)
if (chuaxet[u] )
BFS(u);
}
Bạn đang đọc truyện trên: AzTruyen.Top