廣度優先遍歷(BFS )(轉)

寬度優先搜索(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

相關文章
相關標籤/搜索