圖的遍歷算法:DFS、BFS
阿新 • • 發佈:2018-06-30
TE 需要 rst ash 圖的遍歷 目標 detail 基礎篇 中一 在圖的基本算法中,最初需要接觸的就是圖的遍歷算法,根據訪問節點的順序,可分為深度優先搜索(
DFS)和
廣度優先搜索(BFS
)。
DFS(深度優先搜索)算法
Depth-First-Search
深度優先算法,是一種用於遍歷或搜索樹或圖的算法。沿著樹的深度遍歷樹的節點,盡可能深的搜索樹的分支。
當節點v的所在邊都己被探尋過,搜索將回溯到發現節點v的那條邊的起始節點。 這一過程一直進行到已發現從源節點可達的所有節點為止。
如果還存在未被發現的節點, 則選擇其中一個作為源節點並重復以上過程,整個進程反復進行直到所有節點都被訪問為止。屬於盲目搜索。
DFS可用堆棧(Stack)和遞歸(Recursive)兩種方法實現
如何跟蹤下一步搜索的位置?
使用Stack: 列表中只從一端添加和移除:
- Push:添加元素
- Pop:刪除一個元素
如何跟蹤訪問過的內容?
HashSet::常量添加,刪除和搜索
如何跟蹤從開始到目標的路徑?
HashMap:將每個節點鏈接到發現它的節點
堆棧和遞歸實現過程(偽代碼):
BFS (廣度優先搜索)算法
Breadth-First-Search
BFS是從根節點開始,沿著樹的寬度遍歷樹的節點。
如果所有節點均被訪問,則算法中止。 廣度優先搜索的實現本篇筆記采用隊列。
如何跟蹤下一步搜索的位置?
Queue:列出你只從一端添加和移除的地方
- enqueue:添加一個元素
- deque:刪除一個元素
如何跟蹤訪問過的內容?
HashSet:定時添加,刪除和搜索
如何跟蹤從開始到目標的路徑?
HashMap:將每個節點鏈接到發現它的節點
和DFS唯一不同的是BFS使用隊列來實現,偽代碼如下:
學習參考資料:
深度優先和廣度優先的Python實現
【Python算法】遍歷(Traversal)、深度優先(DFS)、廣度優先(BFS)
搜索思想——DFS & BFS(基礎基礎篇)
圖的遍歷算法:DFS、BFS