資料結構之DFS(鄰接表版)

2021-08-03 17:43:01 字數 1314 閱讀 4255

圖的遍歷 是指從圖中的任一頂點出發,對圖中的所有頂點訪問一次且只訪問一次。

圖的遍歷是圖的基本操作之一,很多需要對圖中每個頂點依次進行的操作都可以在遍歷中完成。圖的遍歷通常有深度優先搜尋和廣度優先搜尋

深度優先搜尋(depth-first search)

深度優先搜尋的基本思想如下:

1、從圖中某個頂點vi出發,首先訪問vi

2、選擇乙個與剛訪問過的頂點vi相鄰接且未訪問過的頂點vj,然後訪問該頂點。以該頂點為新頂點,重複本步驟,直到當前頂點沒有未訪問的鄰接點為止。

3、返回前乙個訪問過的且仍有未訪問的鄰接點的頂點,找出並訪問該頂點的下乙個未訪問的鄰接點,然後執行步驟 2。

ps:若訪問的是非連通圖,我們從某個頂點出發進行深度優先搜尋後,則該頂點所在的連通分量的所有頂點都將被訪問。此時,若圖中還有頂點未訪問,則另選圖中乙個未訪問的頂點作為起始點,重複上述深度優先搜尋過程,直至圖中所有頂點均訪問過為止。

對圖進行深度優先搜尋時,按訪問頂點的先後次序得到的頂點的序列稱為圖的深度優先搜尋序列,簡稱dfs序列。乙個圖的dfs序列可能不唯一,它與所採用的演算法的儲存結構和初始出發點密切相關。

鄰接表版的dfs

完整**

總結dfs的核心就是不斷的訪問頂點,本例採用的是較為普遍的做法,設定乙個標誌(adjlist[v].vertex),若標誌等於1則表明訪問過,若標誌等於0則未訪問過,然後再進行遞迴,當然遞迴傳參記得用引用,不然是不會起到什麼效果的。

資料結構 鄰接多重表

上一節總結了有向圖的另外一種鏈式儲存結構 十字鍊錶,該節繼續總結無向圖的另一種鏈式儲存結構。鄰接表雖然已經能夠很好地表示無向圖了,但是無向圖訪問或者刪除一條邊 vi,vj 時需要同時訪問兩個鍊錶i和j並分別找到對應的邊結點,這給針對圖的邊的操作 標記或刪除 帶來不便利。鄰接多重表因此而演變過來的。鄰...

資料結構 鍊錶 鄰接表

在講解這個內容之前,先來回憶陣列能夠完成哪些操作 1 任意訪問乙個元素,時間複雜度為o 1 o 1 o 1 2 刪除乙個元素,要移動此後的所有元素,時間複雜度為o n o n o n 3 在任意位置之後增添乙個元素,要移動此後的所有元素,時間複雜度為o n o n o n 但如果我們的問題並不需要訪...

資料結構之順序表(java版)

要點 順序表 採用順序儲存結構的線性表 順序儲存結構和鏈式儲存結構不同,強調的是儲存元素在實體地址儲存的上連續!可實現隨機訪問 只要知道第乙個元素的記憶體位址,再通過簡單的加減就能找到任意乙個元素了 順序表耗時在對移動元素上,進行插入 刪除時都需要移動元素 本人做順序表的難點主要在於對順序表進行插入...