廣度優先搜尋 (BFS) 使用佇列:
- 佇列:節點從後端新增,從前端移除。
- 處理集合:正在被探索的節點集合。
- 遍歷順序:節點依照被新增至佇列的順序探索,對被訪問的節點,成本較低的邊優先。
深度優先搜尋 (DFS) 使用堆疊:
- 堆疊:節點從頂端新增,從頂端移除。
- 處理集合:正在被探索的節點集合。
根據實作的 BFS 和 DFS 演算法,此有向圖的結果為:
廣度優先搜尋 (BFS):
- 訪問節點的順序:S, A, X, B, D, C, Y, Z
- 處理集合: {C, D, X, S, A, Z, B, Y}
深度優先搜尋 (DFS):
- 訪問節點的順序:S, A, X, Y, Z, C, D, B
- 處理集合:{C, D, X, S, A, Z, B, Y}
廣度優先搜尋 (BFS) 步驟:
- 訪問 S,佇列:S,處理集合:C, S, A, B
- 訪問 A,佇列:A -> B -> C,處理集合:C, D, X, S, A, B
- 訪問 X,佇列:X -> B -> D -> C,處理集合:C, D, X, S, A, B, Y
- 訪問 B,佇列:B -> C -> D -> Y,處理集合:C, D, X, S, A, B, Y
- 訪問 D,佇列:D -> C -> Y -> C -> D,處理集合:C, D, X, S, A, B, Y
- 訪問 C,佇列:C -> C -> Y -> C -> D -> Y,處理集合:C, D, X, S, A, Z, B, Y
- 訪問 Y,佇列:Y -> Y -> Z,處理集合:C, D, X, S, A, Z, B, Y
- 訪問 Z,佇列:Z -> Z -> Y,處理集合:C, D, X, S, A, Z, B, Y
深度優先搜尋 (DFS) 步驟:
- 訪問 S,堆疊:S,處理集合:C, S, A, B
- 訪問 A,堆疊:A -> B -> C,處理集合:C, D, X, S, A, B
- 訪問 X,堆疊:X -> D -> B -> C,處理集合:C, D, X, S, A, B, Y
- 訪問 Y,堆疊:Y -> D -> B -> C,處理集合:C, D, X, S, A, Z, B, Y
- 訪問 Z,堆疊:Z -> D -> D -> B -> C,處理集合:C, D, X, S, A, Z, B, Y
- 訪問 C,堆疊:C -> D -> D -> B -> C,處理集合:C, D, X, S, A, Z, B, Y
- 訪問 D,堆疊:D -> B -> D -> D -> B -> C,處理集合:C, D, X, S, A, Z, B, Y
- 訪問 B,堆疊:B -> B -> D -> D -> B -> C,處理集合:C, D, X, S, A, Z, B, Y
對於 BFS 和 DFS,在訪問新節點之前的每個步驟都顯示佇列和堆疊,處理集合顯示到目前為止處理過程中已看到的節點。
点点赞赏,手留余香
给TA打赏
評論0