廣度優先搜索 BFS

BFS(breadth-frist search)

在這裏插入圖片描述廣度優先搜索是一層一層的進行遍歷,每層遍歷都以上一層遍歷的結果作爲起點,遍歷一個距離能訪問到的所有節點。需要注意的是,遍歷過的節點不能再次被遍歷。

第一層:

0-->{6,2,1,5}

第二層:

 6-->{4}
 2-->{}
 1-->{}
 5-->{3}

第三層:

4-->{}
3-->{}

每一層遍歷的節點都與根節點的距離相同,設di表示第i 個節點與根節點的距離,推導出一個結論:對於先遍歷的節點 i 與後遍歷的節點j,有di<=dj 。利用這個結論,可以求最短路徑等最優化問題。第一次遍歷到目的節點,其所經歷過的路徑爲最短路徑。應該注意的是,使用BFS只能求無權圖的最短路徑。

在程序實現上需要考慮以下問題:

  • 隊列:用來儲存每一輪便利得到的節點
  • 標記:對於遍歷過的節點,應該將它標記,防止重複遍歷。

279. 完全平方數

可以將每個整數看成圖中的一個節點,如果兩個整數之差爲一個平方數,那麼這兩個整數所在的節點就有一條邊。要求解最小的平方數數量,就是求解從節點n到節點0的最短路徑。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章