1. 程式人生 > >深度優先遍歷和廣度優先遍歷

深度優先遍歷和廣度優先遍歷

圖片 div OS body 返回 深度優先遍歷 深度 鄰接 檢測

鄰接表存儲的圖的深度優先遍歷:

設X是當前被訪問頂點,在對X做過訪問標記後,選擇一條從x出發的未檢測過的邊(x,y)。若發現頂點y已訪問過,則重新選擇另一條從x出發的未檢測過的邊,否則沿邊(x,y)到達未曾訪問過的y,對y訪問並將其標記為已訪問過;然後從y開始搜索,直到搜索完從y出發的所有路徑,即訪問完所有從y出發可達的頂點之後,才回溯到頂點x,並且再選擇一條從x出發的未檢測過的邊。

技術分享圖片

使用深度優先遍歷這個圖的具體過程是:

1、首先從一個從未走過的頂點作為起始頂點,如1號
2、沿1號頂點的邊嘗試訪問其他為走過的頂點,發現2號頂點未走過,到達2號頂點
3、在以2號頂點作為出發點繼續訪問其他未走過的頂點,到達3號頂點
4、在以3號頂點為出發點繼續訪問其他未走過的頂點,發現沒有其他未走過的頂點了
5、返回到2號頂點,發現沿2號頂點也不能再訪問其他頂點了,所以回到1號頂點
6、再以1號頂點作為出發點,到4號頂點
7、再以4號頂點為出發點,到5號頂點,至此,所有頂點都走過,遍歷結束

最後的遍歷順序是:1,2,3,4,5

采用鄰接表存儲的圖按深度優先搜索方法進行遍歷的算法類似於二叉樹的先序遍歷

領接表的存儲圖的廣度優先遍歷:

從圖中某個頂點V0出發,訪問V0的各個未曾訪問的領結點W1,W2... 然後再從W1,W2...出發,訪問各自未訪問的領結點

技術分享圖片

使用廣度優先遍歷這個圖的具體過程是:

1、首先從一個從未走過的頂點作為起始頂點,如1號
2、從1開始,找到與1關聯的頂點2,4
3、由2出發,找到3;由4出發,找到5

最後遍歷順序為:1,2,4,3,5

采用鄰接表存儲的圖按廣度優先搜索方法進行遍歷的算法類似於二叉樹的層序遍歷

深度優先遍歷和廣度優先遍歷