廣度優先搜尋BFS
廣度優先搜尋BFS
介紹
節點選項是用 先進先出(FIFO) 方式進行管理,所以可以使用佇列的資料結構

廣度優先搜尋(BFS)是一種圖形搜尋演算法,從圖的起點開始搜尋,先遍歷所有距離起點為1的節點,再遍歷所有距離起點為2的節點,以此類推直到所有可達節點都被遍歷。 BFS適用於需要找到最短路徑或最少步驟的問題,例如迷宮遊戲或圖形路徑問題
虛擬碼
以下是使用 JavaScript 撰寫的 BFS 演算法的簡易虛擬碼範本:
// 假設圖形表示為鄰接表 adjacency list 的形式 |
這個 BFS 實現使用 Set 來保存已訪問的節點,使用佇列來保存尚未探索的節點,並在佇列中使用先進先出的方式來探索圖形。
複雜度
時間複雜度
$O(V+E)$
其中 V 是節點的數量,E 是邊的數量。在最壞的情況下,BFS 將遍歷圖形中的每個節點和每條邊,因此它的時間複雜度與圖形的大小成正比。
空間複雜度
$O(V)$
因為BFS 使用了一個佇列來保存尚未探索的節點,其中 V 是節點的數量。在最壞的情況下,BFS 需要將圖形中的每個節點都加入佇列,因此空間複雜度也與圖形的大小成正比。
實戰
637. Average of Levels in Binary Tree
題目說明
給定一棵二元數,以數組的形式返回每一層節點的平均值。實際答案在 $10^5$ 以內的答案將被接受。

解法
使用佇列方式層次遍歷,並累加每一層節點的值,計算出每一層節點的平均值,並儲存於陣列中傳回。
/** |
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Joeの小屋!
評論
ValineDisqus




