Sắp xếp Topo Tier 5 · L32
Sắp xếp tuyến tính đỉnh của DAG sao cho mọi cạnh u → v thì u đứng trước v.
Ba module: Kahn (BFS), DFS post-order, và phát hiện chu trình.
1. Kahn's algorithm — bóc lớp theo in-degree
Đếm in-degree → đỉnh in-degree 0 vào queue → bóc dần, mỗi lần giảm in-degree neighbor → kết xuất topo order. Bấm Bước để chạy từng bước, hoặc Chạy để tự động.
Queue:
Topo order:
Chọn đồ thị rồi bấm "Bước".
chưa xử lý
trong queue (in-degree 0)
đã vào order
2. DFS post-order — 3 màu, push stack rồi đảo ngược
DFS đi sâu. Đỉnh chuyển gray khi vào đệ quy, black + push stack khi hoàn thành (post-order). Cuối cùng đảo ngược stack ra topo order.
Stack (post-order):
Topo (đảo ngược):
Bấm "Bước" để bắt đầu DFS từ đỉnh 0.
white
gray (đang đệ quy)
black (xong)
3. Cycle detection — gặp đỉnh gray là back edge
DFS 3 màu. Khi cạnh u → w trỏ tới đỉnh đang gray
(tổ tiên trong stack đệ quy) ⟹ back edge ⟹ chu trình.
Đổi đồ thị để xem trường hợp có và không có chu trình.
Bấm "Bước" để chạy DFS.
white
gray
black
back edge → chu trình