1. 程式人生 > >圖的遍歷算法:DFS、BFS

圖的遍歷算法:DFS、BFS

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