20172307 2018-2019-1 《程序設計與數據結構》第9周學習總結

20172307 2018-2019-1 《程序設計與數據結構》第9周學習總結

教材學習內容總結

  • 無向圖是一種邊爲無序結點對的圖。
  • 若是圖中的兩個頂點之間有一條連通邊,則稱這兩個頂點是領接的。
  • 若是無向圖擁有最大數目的連通頂點的邊,則認爲這個無向圖是徹底的。
  • 路徑是圖中的一系列邊,每條邊連通兩個頂點。
  • 環路是一種首頂點和末頂點相同的且沒有重邊的路徑。
  • 無向樹是一種連通的無環無向圖,其中一個元素被指定爲樹根。
  • 有向圖有時也稱爲雙向圖,它是一種邊爲有序頂點對的圖。
  • 有向圖中的路徑是圖中連通兩個頂點的有向序列。

教材學習中問題和解決過程

  • 問題1:對圖的深度遍歷和廣度遍歷的區別不太理解。html

  • 問題1解決方案:
  • 深度優先搜索(Depth_Fisrst Search)遍歷相似於樹的先根遍歷,是樹的先根遍歷的推廣。
    假設初始狀態是圖中全部頂點不曾被訪問,則深度優先搜索可從圖中某個頂點發v 出發,訪問此頂點,而後依次從v 的未被訪問的鄰接點出發深度優先遍歷圖,直至圖中全部和v 有路徑相通的頂點都被訪問到;若此時圖中尚有頂點未被訪問,則另選圖中一個不曾被訪問的頂點做起始點,重複上述過程,直至圖中全部頂點都被訪問到爲止。java

以以下圖的無向圖G5爲例,進行圖的深度優先搜索:

搜索過程:

假設從頂點v1 出發進行搜索,在訪問了頂點v1 以後,選擇鄰接點v2。由於v2 不曾訪問,則從v2 出發進行搜索。依次類推,接着從v4 、v8 、v5 出發進行搜索。在訪問了v5 以後,因爲v5 的鄰接點都已被訪問,則搜索回到v8。因爲一樣的理由,搜索繼續回到v4,v2 直至v1,此時因爲v1 的另外一個鄰接點未被訪問,則搜索又從v1 到v3,再繼續進行下去由此,獲得的頂點訪問序列爲:

顯然,這是一個遞歸的過程。爲了在遍歷過程當中便於區分頂點是否已被訪問,需附設訪問標誌數組visited[0:n-1], ,其初值爲FALSE ,一旦某個頂點被訪問,則其相應的份量置爲TRUE。git

+廣度優先搜索(Breadth_First Search) 遍歷相似於樹的按層次遍歷的過程。
假設從圖中某頂點v 出發,在訪問了v 以後依次訪問v 的各個不曾訪問過和鄰接點,而後分別從這些鄰接點出發依次訪問它們的鄰接點,並使「先被訪問的頂點的鄰接點」先於「後被訪問的頂點的鄰接點」被訪問,直至圖中全部已被訪問的頂點的鄰接點都被訪問到。若此時圖中尚有頂點未被訪問,則另選圖中一個不曾被訪問的頂點做起始點,重複上述過程,直至圖中全部頂點都被訪問到爲止。換句話說,廣度優先搜索遍歷圖的過程當中以v 爲起始點,由近至遠,依次訪問和v 有路徑相通且路徑長度爲1,2,…的頂點。數組

對圖以下圖所示無向圖G5 進行廣度優先搜索遍歷:

廣度搜索過程:

首先訪問v1 和v1 的鄰接點v2 和v3,而後依次訪問v2 的鄰接點v4 和v5 及v3 的鄰接點v6 和v7,最後訪問v4 的鄰接點v8。因爲這些頂點的鄰接點均已被訪問,而且圖中全部頂點都被訪問,由些完成了圖的遍歷。獲得的頂點訪問序列爲:
v1→v2 →v3 →v4→ v5→ v6→ v7 →v8
和深度優先搜索相似,在遍歷的過程當中也須要一個訪問標誌數組。而且,爲了順次訪問路徑長度爲二、三、…的頂點,需附設隊列以存儲已被訪問的路徑長度爲一、二、… 的頂點。數據結構

代碼調試中的問題和解決過程

  • 問題1:
  • 問題1解決方案:

代碼託管

上週考試錯題總結

本週沒有錯題。學習

結對及互評

  • 本週結對學習狀況
    • 20172311
    • 對課本上的諸多疑問點進行了討論,同時對代碼實現過程當中遇到的一些問題也經過討論得以解決。
  • 上週博客互評狀況

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 0/0 1/1 6/6
第二週 612/612 1/2 18/24
第三週 516/1128 1/3 16/40
第四周 702/1830 2/5 16/56
第五週 1926/3756 1/6 18/74
第六週 948/4304 1/7 18/92
第七週 771/5075 1/8 20/112
第八週 1204/6279 1/9 20/132
第九周 3772/10051 1/10 20/152

參考資料

相關文章
相關標籤/搜索