圖的遍歷

  給定圖G=(V,E), V(G)的某一頂點,從v出發訪問G中其餘的頂點,且每個頂點位置僅被訪問一次,這過程成爲圖的遍歷。
圖的遍歷中由於圖中的任意頂點都可能和其他的頂點想鄰接,即在圖中可能存在迴路,因此在訪問啦某個頂點後,可能順着某條邊又訪問到已經訪問的頂點,因此在遍歷圖的時候,必須記下已經訪問的頂點。具體做法是設置一個數組visted[n],visted[i]對應於頂點vi,visited[i]對應於頂點vi,若vi未被訪問,則visited[i]=0.
其訪問又兩種方法:深度優先遍歷和廣度優先遍歷。
深度優先遍歷:
其策略類似於樹前序遍歷,是樹的前序遍歷的推廣。基本思想:對於給定的G=(V,E)首先將V中每個頂點都標記爲未被訪問,然後,選取一個源點v在V中,將v標記爲已經訪問,在遞歸的用深度優先搜索的方法,依次搜索v的所有鄰接點w。若w未被訪問過,則以w爲新的出發點繼續進行深度優先遍歷,如果從v出發又路的頂點都已經被訪問過,則從v的搜索過程結束。此時未被訪問的頂點,並從這個頂點開始做新的搜索。直到V中所有都被訪問過爲止。
需要說明的是,深度優先搜索的訪問順序和圖的鄰接表存儲有關。由於圖的鄰接表存儲不唯一,因此對於同一個圖,其深度優先遍歷輸出的結果也可能不一樣。但採用鄰接矩陣或鄰接表存儲結果內容已經確定的圖的DFS序列將是確定的。
廣度優先遍歷:
類似於樹的層次遍歷。採用的搜索方法的特點是儘可能先對橫向結點進行搜索。基本思想,給定圖G=(V,E)從圖中某個源點v出發,在訪問啦頂點v後,接着就儘可能在橫向搜索v的說有鄰接點。在一次訪問v的各個未被訪問的鄰接點w1.w2,...wn。之後,分別從這些鄰接點出發依次訪問w1,w2,w3.....wn鄰接點所有未被訪問的。依次類推,直至圖中所有的和源點v又路徑相通的頂點都已訪問爲止。此時從v開始的搜索過程結束。若G是連通圖,則遍歷完成;否則,在G中另個尚未訪問的頂點作爲新源點繼續上述搜索,直至G中所有頂點均被訪問爲止。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章