1 / 33

資料結構

資料結構. 第 7 章 圖形結構. 7-1  認識圖形. Koenigsberg Bridge 問題. 7-1-1  圖形的定義. 圖形 G 是由 V(G) 和 E(G) 所組成,其中 V(G) 是一個有限且非空的集合,代表頂點, E(G) 是一個有限的集合,代表邊 ,寫成 G = (V, E) 。. 7-1-2  圖形的相關名詞. 相關名詞: 相鄰 分支度 長度 簡單路徑 連通 、強連通 、弱連通 循環 加權圖形 自身迴圈 、多重圖形 、簡單圖形 子圖形 連通單元、強連通單元 完整圖形. 7-2  圖形的表示方式. 7-2-1  相鄰矩陣

saskia
Download Presentation

資料結構

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 資料結構 第7章 圖形結構

  2. 7-1 認識圖形 • Koenigsberg Bridge問題

  3. 7-1-1 圖形的定義 圖形G是由V(G) 和E(G) 所組成,其中V(G) 是一個有限且非空的集合,代表頂點,E(G) 是一個有限的集合,代表邊 ,寫成G = (V, E)。

  4. 7-1-2 圖形的相關名詞 相關名詞: • 相鄰 • 分支度 • 長度 • 簡單路徑 • 連通 、強連通 、弱連通 • 循環 • 加權圖形 • 自身迴圈 、多重圖形 、簡單圖形 • 子圖形 • 連通單元、強連通單元 • 完整圖形

  5. 7-2 圖形的表示方式 7-2-1 相鄰矩陣 • 範例7.1:以相鄰矩陣存放無向圖形G1。

  6. 範例7.2:以相鄰矩陣存放有向圖形G2。

  7. 7-2-2 相鄰串列 • 範例7.3:以相鄰串列存放無向圖形G1。

  8. 範例7.4:以相鄰串列存放有向圖形G2。

  9. 7-2-3 加權圖形的表示方式 • 範例7.5:以相鄰矩陣存放加權圖形G6。

  10. 範例7.6:以相鄰串列存放加權圖形G6。

  11. 7-3 圖形的基本運算 7-3-1 深度優先搜尋 (DFS)

  12. 範例7.7:[DFS] 假設下列圖形的起始頂點為A,試寫出其深度優先搜尋結果。

  13. 解答:

  14. 7-3-2 廣度優先搜尋 (BFS)

  15. 範例7.9:[BFS] 假設下列圖形的起始頂點為A,試寫出其廣度優先搜尋結果。

  16. 解答:

  17. 7-3-3 連通單元 • 只要呼叫dfs(0) 或bfs(0) 函數,令它從第一個頂點開始走訪,一旦在走訪完畢後還有其它尚未拜訪過的頂點,就表示該圖形不是一個連通圖形 ,下圖即為一例。 show_connected() { int v; for(v = 0; v < n; v++) if (visited[v] == FALSE){ dfs(v); printf("\n"); } }

  18. 7-3-4 擴張樹 • 圖形的擴張樹 (spanning tree) 指的是以圖形內最少的邊數連接所有頂點所形成的樹,而樹 (tree) 則是連通且沒有循環的圖形 。

  19. 圖形G14幾種可能的擴張樹 :

  20. G15的DFS樹 G15的BFS樹

  21. 7-4 最小擴張樹 • Kruskal演算法

  22. Prim演算法

  23. Sollin演算法

  24. 7-5 最短路徑 • 最短路徑 (shortest path) 又分成「某個頂點到其它頂點的最短路徑」和「任意兩個頂點的最短距離」兩種情況。 以加權圖形表示城市之間的交通路線

  25. 7-5-1 某個頂點到其它頂點的最短路徑

  26. 使用Dijkstra演算法求取某個頂點到其它頂點的最短路徑:每次都要從尚未選擇的頂點中選擇距離最短者Vx ,然後檢查有沒有其它尚未選擇的頂點Vi因為行經Vx而使距離變短,如此重複V - 1次,直到找出第V - 1個頂點的最短路徑,整個演算法才宣告結束。

  27. 7-5-2 任意兩個頂點的最短距離 • 方法一:分別以加權圖形的每個頂點做為起始頂點執行Dijkstra演算法。 • 方法二:使用Floyd演算法,其步驟如下 : • 使用admatrix[V][V] 陣列存放加權圖形的相鄰矩陣。 • 定義Ak[i][j] 為Vi到Vj的最短距離,而且中間只能經過索引小於等於k的頂點。 • 定義A0[i][j] 為admatrix[i][j] 。 • 根據下式依序求取A0、A1、…、AV,AV即為最後的結果。 Ak[i][j] = min{ Ak-1[i][j], Ak-1[i][k] + Ak-1[k][j]}, k ≥ 1且A0[i][j] = 邊 (Vi, Vj) 的距離

  28. 範例7.18:[Floyd演算法] 針對加權圖形G17找出任意兩個頂點的最短距離。

  29. 解答: 1. 3. 2. 4.

  30. 7-6 拓樸排序 • 頂點工作網路 (AOV網路,activity on vertex network) • 前行者 (predecessor)、後繼者 (successor) • 立即前行者 (immediate predecessor) 、立即後繼者 (immediate successor) • 拓樸排序 (topology sort),例如V0→V1→V2→V3→V4→V5→V6→V7和V0→V1→V2→V3→V4→ V6→V5→V7

  31. 範例7.20:[拓樸排序] 針對有向圖形G18找出其拓樸排序。 1. 2.

  32. 3. 4. 5. 6.

  33. 7. 8. 9.輸出V7,所有頂點均輸出完畢,得到拓樸排序為V0→V1→V2→V3→V4→V5→V6→V7。

More Related