軟考筆記-有向圖的鄰接矩陣

繁星TT發表於2024-10-26

軟考筆記-有向圖的鄰接矩陣

下面是2024年上半年的選擇題:

對下列有向圖的鄰接矩陣,進行深度遍歷的次序是( )。

V1 V2 V3 V4 V5 V6
18 3
5 4
15
12

A.v1-v2-v3-v4-v5-v6 B.v1-v4-v2-v3-v5-v6

C.v1-v2-v3-v5-v4-V6 D.v1-V2-v5-V4-v3-v6

解答:

題目中給出的圖需要最佳化,方便我們找各個頂點之間的關係,如下:

V1 V2 V3 V4 V5 V6
V1 18 3
V2 5 4
V3
V4 15
V5 12
V6

在這個圖中,節點V1到V6之間的連線情況如下(∞表示沒有直接邊):

  • V1 -> V2 (權重18)
  • V1 -> V3 (權重3)
  • V2 -> V3 (權重5)
  • V2 -> V5 (權重4)
  • V4 -> V2 (權重15)
  • V5 -> V4 (權重12)

深度優先搜尋(DFS)是從給定的起始頂點開始,儘可能深地探索每個分支,直到無法繼續為止,然後回溯並嘗試另一條路徑。根據題目提供的鄰接矩陣,我們從V1開始進行深度遍歷。假設從V1開始:

  1. 從V1出發,可以去V2或V3。
  2. 我們選擇先訪問V3(也可以先訪問V2,但為了簡化說明,這裡以V3為例)。因此,當前遍歷順序為[V1, V3]。
  3. V3沒有其他可訪問的鄰居,所以回到V1。
  4. 從V1再去V2。現在遍歷順序為[V1, V3, V1, V2]。
  5. 從V2出發,可以選擇V3或者V5。由於V3已經被訪問過,我們前往V5。遍歷順序更新為[V1, V3, V1, V2, V5]。
  6. 從V5出發,可以去V4。遍歷順序變為[V1, V3, V1, V2, V5, V4]。
  7. V4指向V2,但由於V2已經訪問過了,所以停止。因此,一個可能的深度遍歷次序是:V1 -> V3 -> V1 -> V2 -> V5 -> V4。

需要注意的是,選項中沒有這個選項。原因:如果選擇不同的起點或者是對等選項時選擇了不同的下一個節點,則最終得到的具體遍歷順序可能會有所不同。例如,如果一開始選擇了從V1到V2而不是V3,那麼結果會有所變化。

那麼我們選擇從V1到V2,重複上述步驟:

  1. 從V1出發,可以去V2或V3。
  2. 我們選擇先訪問V2。因此,當前遍歷順序為[V1, V2]。
  3. V2可以訪問V3。所以,當前遍歷順序為[V1, V2,V3]。
  4. V3沒有其他可訪問的鄰居,所以回到V2。[V1, V2,V3,V2]。
  5. 再從V2出發,由於V3訪問過了,所以現在訪問V5。[V1, V2,V3,V2,V5]。
  6. 再從V5出發,V5只能訪問V4。[V1, V2,V3,V2,V5,V4]。
  7. 再從V4出發,V4只能訪問V2,但是V2訪問過了。當目前只有V6沒有訪問,看圖可知,V6在這個過程中並沒有被訪問到,因為V6在圖中是孤立的節點,沒有任何邊與之相連。V6的部分實際上是無法透過DFS直接訪問到的。如果題目要求包含所有節點,那麼V6應該被視為孤立節點,單獨處理。所以最後單獨訪問V6。最終的結果是[V1, V2,V3,V2,V5,V4,V6]。

我們得到的答案是:[V1, V2,V3,V2,V5,V4,V6]

注意我們重複步驟時,為了儘可能詳細,回溯V2時保留了再次從V2出發的頂點,這個是可以省略的。所以最終結果是:[V1, V2,V3,V5,V4,V6],選C。

相關文章