• Tìm đường đi giữa hai đỉnh bất kỳ của đồ thị • Kiểm tra tính chất liên thông của đồ thị • Tìm cây khung của đồ thị • Tài liệu tham khảo • Chương trình mô phỏng các thuật toán... Để g
Trang 1Thuật toán BFS và ứng dụng
Nhóm 1:
Bạch Ngọc Hiệp Nguyễn Duy Long Phạm Quang Hưng
Trang 2 Ý tưởng
Các bước thực hiện – giải mã
Ví dụ
Đánh giá phương pháp.
• Ứng dụng thuật toán BFS vào 1 số bài toán.
• Tìm đường đi giữa hai đỉnh bất kỳ của đồ thị
• Kiểm tra tính chất liên thông của đồ thị
• Tìm cây khung của đồ thị
• Tài liệu tham khảo
• Chương trình mô phỏng các thuật toán
Trang 3 Cho 1 đỉnh bắt đầu duyệt (A), lập lịch duyệt các đỉnh kề với A Cứ như vậy duyệt lần lượt theo thứ tự từ gần đến xa.
Sử dụng cấu trúc Queue để nạp các đỉnh cần duyệt.
Trang 4 Để 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ử (tương ứng với n đỉnh) để xác định phần tử đã được duyệt.
Nếu đỉnh i đã duyệt, chuaxet[i]=0; ngược lại nếu i chưa xét chuaxet[i]=1;
Trang 7G I
Đang xét
Chưa xét Sắp được xét
Đã xét
Trang 8G I
Đang xét
Chưa xét Sắp được xét
Trang 9G I
Đang xét
Chưa xét Sắp được xét
Trang 10G I
Đang xét
Chưa xét Sắp được xét
Trang 11G I
Đang xét
Chưa xét Sắp được xét
Đã xét
D
C
Trang 12G I
Đang xét
Chưa xét Sắp được xét
Đã xét
I
D
Trang 13G I
Đang xét
Chưa xét Sắp được xét
Đã xét
G I
Trang 14G I
Đang xét
Chưa xét Sắp được xét
Trang 15G I
Đang xét
Chưa xét Sắp được xét
Đã xét
F E
Trang 16G I
Đang xét
Chưa xét Sắp được xét
Trang 17Đơn giản, trực quan, dễ cài đặt Để kiểm tra hai đỉnh có kề nhau hay không chỉ cần xem vị trí đó là 0 hay 1.
Lãng phí bộ nhớ do dùng ma trận n*n Khi xét 1 đỉnh bất kỳ thì cần kiểm tra nó với tất cả các đỉnh còn lại, nếu là đỉnh cô lập sẽ tốn thời gian.
+ Danh sách cạnh:
Nếu đồ thị thưa, sẽ tiết kiệm không gian lưu trữ Khi cần xét tất cả các cạnh của đồ thị, thời gian thực hiện sẽ nhanh hơn ma trận kề.
Khi cần xét tất cả các đỉnh kề với một đỉnh bất kỳ, ta phải xét tất cả các cạnh, lọc ra cạnh cần xét Dẫn đến việc tốn thời gian khi đồ thị có nhiều cạnh + Danh sách kề:
Duyệt đồ thị nhanh chóng hơn 2 cách trên.
Yếu hơn ma trận kề trong việc xét 2 cạnh có nối với nhau hay không Vì phải duyệt toàn bộ danh sách kề của một đỉnh.
Trang 18 Kiểm tra tính chất liên thông của đồ thị
Tìm đường đi giữa hai đỉnh bất kỳ của đồ thị,
Tìm cây khung của đồ thị
Trang 20Đồ thị liên thông VD:
Trang 21Đồ thị không liên thông
Trang 23 Phương pháp:
Để xác định tính liên thông của đồ thị Ta sử dụng lại mảng chuaxet[] từ thuật toán BFS();
Nếu 1 phần tử trong mảng chuaxet[] có giá trị 1 tức là có đỉnh chưa được xét thì đồ thị không liên thông,
Ngược lại nếu tất cả các đỉnh đã được đánh dấu đã xét thì đồ thị liên thông.
Trang 25 Bài Toán: Cho đồ thị G=(V,E)
Trang 28printf( " -> %d" ,f);}
}
}
Trang 29của G và thỏa mãn:
H không có chu trình, liên thông và có n-1 cạnh.
Giữa 2 đỉnh bất kỳ của H được nối với nhau bởi đúng 1 đường đi.
Trang 30Đồ thị G Cây khung của G
Trang 31 Cách thức xây dựng Cây khung sử dụng thuật toán BFS:
Giả sử ta cần xây dựng 1 cây khung xuất phát từ đỉnh u nào đó
Khi xét từ u đến được đỉnh v ( chuaxet[v]=1) thì ta kết nạp cạnh (u,v) vào cây khung
Trang 34- vi.wikipedia.org.
- Giải thuật & lập trình_Lê Minh Hoàng.
- Cấu trúc dữ liệu và giải thuật_Đỗ Xuân Lôi.
Trang 35Chúc các bạn học tập tốt!!!