圖的遍歷

圖的遍歷是指從圖中的任一頂點出發,對圖中的所有頂點訪問一次且只訪問一次。圖的遍歷操作和樹的遍歷操作功能相似。圖的遍歷是圖的一種基本操作,圖的其它算法如求解圖的連通性問題,拓撲排序,求關鍵路徑等都是建立在遍歷算法的基礎之上。

由於圖結構本身的複雜性,所以圖的遍歷操作也較複雜,主要表現在以下四個方面:
① 在圖結構中,沒有一個“自然”的首結點,圖中任意一個頂點都可作爲第一個被訪問的結點。
② 在非連通圖中,從一個頂點出發,只能夠訪問它所在的連通分量上的所有頂點,因此,還需考慮如何選取下一個出發點以訪問圖中其餘的連通分量。
③ 在圖結構中,如果有迴路存在,那麼一個頂點被訪問之後,有可能沿迴路又回到該頂點。
④ 在圖結構中,一個頂點可以和其它多個頂點相連,當這樣的頂點訪問過後,存在如何選取下一個要訪問的頂點的問題。

圖的遍歷通常有深度優先搜索和廣度優先搜索兩種方式,他們對無向圖和有向圖都適用。
對於圖的遍歷來說,如何避免因迴路陷入死循環,就需要科學地設計遍歷方案,通過有兩種遍歷次序方案:深度優先遍歷和廣度優先遍歷。

2.1 深度優先遍歷
深度優先遍歷,也有稱爲深度優先搜索,簡稱DFS。其實,就像是一棵樹的前序遍歷。
它從圖中某個結點v出發,訪問此頂點,然後從v的未被訪問的鄰接點出發深度優先遍歷圖,直至圖中所有和v有路徑相通的頂點都被訪問到。若圖中尚有頂點未被訪問,則另選圖中一個未曾被訪問的頂點作起始點,重複上述過程,直至圖中的所有頂點都被訪問到爲止。
這裏寫圖片描述
1.從0開始,首先找到0的關聯頂點3
2.由3出發,找到1;由1出發,沒有關聯的頂點。
3.回到3,從3出發,找到2;由2出發,沒有關聯的頂點。
4.回到4,出4出發,找到1,因爲1已經被訪問過了,所以不訪問。
所以最後順序是0,3,1,2,4

2.2 廣度優先遍歷
廣度優先遍歷,又稱爲廣度優先搜索,簡稱BFS。圖的廣度優先遍歷就類似於樹的層序遍歷了。
假設從圖中某頂點v 出發,在訪問了v 之後依次訪問v 的各個未曾訪問過和鄰接點,然後分別從這些鄰接點出發依次訪問它們的鄰接點,並使“先被訪問的頂點的鄰接點”先於“後被訪問的頂點的鄰接點”被訪問,直至圖中所有已被訪問的頂點的鄰接點都被訪問到。若此時圖中尚有頂點未被訪問,則另選圖中一個未曾被訪問的頂點作起始點,重複上述過程,直至圖中所有頂點都被訪問到爲止。換句話說,廣度優先搜索遍歷圖的過程中以v 爲起始點,由近至遠,依次訪問和v 有路徑相通且路徑長度爲1,2,…的頂點。

首先訪問v1 和v1 的鄰接點v2 和v3,然後依次訪問v2 的鄰接點v4 和v5 及v3 的鄰接點v6 和v7,最後訪問v4 的鄰接點v8。由於這些頂點的鄰接點均已被訪問,並且圖中所有頂點都被訪問,由些完成了圖的遍歷。得到的頂點訪問序列爲:

這裏寫圖片描述
廣度搜索過程:
這裏寫圖片描述

v1→v2 →v3 →v4→ v5→ v6→ v7 →v8

和深度優先搜索類似,在遍歷的過程中也需要一個訪問標誌數組。並且,爲了順次訪問路徑長度爲2、3、…的頂點,需附設隊列以存儲已被訪問的路徑長度爲1、2、… 的頂點。

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