寬度優先搜索(BFS, Breadth First Search)是一個針對圖和樹的遍歷算法。發明於上世紀50年代末60年代初,最初用於解決迷宮最短路徑和網絡路由等問題。算法
對於下面的樹而言,BFS方法首先從根節點1開始,其搜索節點順序是1,2,3,4,5,6,7,8。網絡
BFS使用隊列(queue)來實施算法過程,隊列(queue)有着先進先出FIFO(First Input First Output)的特性,spa
BFS操做步驟以下:
一、把起始點放入queue;
二、重複下述2步驟,直到queue爲空爲止:
1) 從queue中取出隊列頭的點;
2) 找出與此點鄰接的且還沒有遍歷的點,進行標記,而後所有放入queue中。.net
下面結合一個圖(graph)的實例,說明BFS的工做過程和原理:
(1)將起始節點1放入隊列中,標記爲已遍歷:3d
(2)從queue中取出隊列頭的節點1,找出與節點1鄰接的節點2,3,標記爲已遍歷,而後放入queue中。blog
(3)從queue中取出隊列頭的節點2,找出與節點2鄰接的節點1,4,5,因爲節點1已遍歷,排除;標記4,5爲已遍歷,而後放入queue中。隊列
(4)從queue中取出隊列頭的節點3,找出與節點3鄰接的節點1,6,7,因爲節點1已遍歷,排除;標記6,7爲已遍歷,而後放入queue中。路由
(5)從queue中取出隊列頭的節點4,找出與節點4鄰接的節點2,8,2屬於已遍歷點,排除;所以標記節點8爲已遍歷,而後放入queue中。原理
(6)從queue中取出隊列頭的節點5,找出與節點5鄰接的節點2,8,2,8均屬於已遍歷點,不做下一步操做。搜索
(7)從queue中取出隊列頭的節點6,找出與節點6鄰接的節點3,8,9,3,8屬於已遍歷點,排除;所以標記節點9爲已遍歷,而後放入queue中。
(8)從queue中取出隊列頭的節點7,找出與節點7鄰接的節點3, 9,3,9屬於已遍歷點,不做下一步操做。
(9)從queue中取出隊列頭的節點8,找出與節點8鄰接的節點4,5,6,4,5,6屬於已遍歷點,不做下一步操做。
(10)從queue中取出隊列頭的節點9,找出與節點9鄰接的節點6,7,6,7屬於已遍歷點,不做下一步操做。
(11)queue爲空,則遍歷結束
應用參照:https://blog.csdn.net/raphealguo/article/details/7523411