深入解析BFS演算法原理,帶圖解說明,並附帶Python程式碼實作BFS演算法

PHPz
發布: 2024-01-22 23:24:05
轉載
1322 人瀏覽過

BFS又稱為廣度優先搜索,和DFS演算法一樣都是遞歸演算法,不同的是,BFS演算法透過佇列,在避免循環的同時遍歷目標所有節點。

BFS演算法的工作原理圖解

以具有5個節點的無向圖為例,如下圖:

BFS算法概念原理详细图解 Python代码实现BFS算法

從節點0開始,BFS演算法首先將其放入Visited清單並將其所有相鄰節點放入佇列。

BFS算法概念原理详细图解 Python代码实现BFS算法

接下來,存取佇列前面的節點1,並前往節點1相鄰的節點。因為節點0已經被存取過,所以訪問節點2。

BFS算法概念原理详细图解 Python代码实现BFS算法

節點2有一個未存取的相鄰節點4,但因為節點4在佇列的最後,因此我們要先存取位於佇列前面的節點3。

BFS算法概念原理详细图解 Python代码实现BFS算法

佇列中只剩下節點4沒有被訪問,所以最後訪問節點4。

BFS算法概念原理详细图解 Python代码实现BFS算法

至此,已經完成了此無向圖的廣度優先遍歷。

BFS演算法的偽代碼

create a queue Q 
mark v as visited and put v into Q 
while Q is non-empty 
remove the head u of Q 
mark and enqueue all (unvisited) neighbours of u
登入後複製

Python程式碼實作BFS演算法

import collections
def bfs(graph, root):
    visited, queue = set(), collections.deque([root])
    visited.add(root)

while queue:
        vertex = queue.popleft()
        print(str(vertex) + " ", end="")

        for neighbour in graph[vertex]:
            if neighbour not in visited:
                visited.add(neighbour)
                queue.append(neighbour)

if __name__ == '__main__':
    graph = {0: [1, 2], 1: [2], 2: [3], 3: [1, 2]}
    print("Following is Breadth First Traversal: ")
    bfs(graph, 0)
登入後複製

以上是深入解析BFS演算法原理,帶圖解說明,並附帶Python程式碼實作BFS演算法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:163.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!