Presentation is loading. Please wait.

Presentation is loading. Please wait.

第7章 圖形與網路 資料結構設計與C++程式應用

Similar presentations


Presentation on theme: "第7章 圖形與網路 資料結構設計與C++程式應用"— Presentation transcript:

1 第7章 圖形與網路 資料結構設計與C++程式應用
Fundamentals of Data Structures and Their Applications Using C++ 第7章 圖形與網路 資料結構設計與C++程式應用 版權所有 禁止重製

2 圖形的基本術語 圖形(Graph) G = (V,E) 頂點(Vertices,或稱Nodes) 邊(Edges)
無向圖(Undirected Graph) (V1 ,V2) 有向圖(Directed Graph) <V1 ,V2>

3 圖形的基本術語 完全圖(Complete Graph) 路徑(Path) 路徑之長度(Path Length)
簡單路徑(Simple Path) 迴路(Cycle) 相連的(Connected) 相連單元(Connected Component) 子圖(Subgraph) 緊密相連(Strongly Connected) 緊密相連單元(Strongly Connected Component) 出分支度(Out Degree) 入分支度(In Degree)

4 圖形的表示法 鄰接矩陣表示法

5 圖形的表示法 鄰接串列表示法

6 圖形的表示法 鄰接串列與反鄰接串列 鄰接串列 反鄰接串列

7 圖形的表示法 鄰接複串列表示法 邊節點

8 圖形追蹤 先深後廣搜尋法(Depth First Search,簡稱DFS) 1.選擇一個頂點VX當做起始點,並做一個已拜訪過的記號。
2.在所有與VX相連且未被拜訪過的頂點中任選一個頂點,令VY, 做一個已拜訪過的記號,並以VY為新的起點進行先深後廣搜尋。 堆疊

9 圖形追蹤 先廣後深搜尋法(Breadth First Search,簡稱 BFS) 佇列 1.選擇一個起始頂點VX,並做一個已拜訪過的記號。
3.重複步驟4直到佇列空了為止。 4.從佇列取出一個頂點VX,做一個已拜訪過的記號,並將與VX相連且未 拜訪過的頂點放入佇列中。 佇列

10 擴張樹(Spanning Tree) 擴張樹 一個包含 N 個頂點的無向相連圖,我們可以找出用圖中的 N-1 個邊來連接所有頂點的樹
若再加入圖形中其餘的邊到擴張樹中必會形成迴路 擴張樹中的任兩個頂點間都是相連的,也就是存在一條路徑可通,但此一路徑不一定是原圖形中該兩頂點之最短路徑。

11 擴張樹(Spanning Tree) 擴張樹 DFS 擴張樹 BFS 擴張樹

12 花費最少擴張樹(Minimum Cost Spanning Tree)
P氏法(Prim's Method) 1.令 A=V,B=ψ,T=ψ。 2.從A中任選一個頂點,將之從A搬移到B,並加入T。 3.找出一條連接A和B的最少花費邊(a,b),其中aA,bB, 且邊(a,b)加到T不會造成迴路。 4.將頂點a自A搬移到B,並將頂點a與邊(a,b)加入T。 5.重複步驟3、4直到 A=ψ。   花費最少 擴張樹

13 花費最少擴張樹(Minimum Cost Spanning Tree)
K氏法(Kruskal’s Method) 1.令花費最少擴張樹 T=ψ。 2.從E中選取花費最少的邊(VX ,VY)。 3.如果(VX,VY)不會使T產生迴路則將之加到T中; 否則,自E中刪除之。 4.重複步驟2、3,直到T的邊數等於 N-1 為止。 花費最少 擴張樹

14 最短路徑問題(The Shortest Path Problem)
從一個城市出發到其他每一個城市之最短距離(Single Source All Destination) 從頂點V出發到達其餘每一個頂點之最短路徑之演算法為:

15 最短路徑問題(The Shortest Path Problem)
1. 設定花費矩陣COST之初值,即對於每一個邊,令 COST[i][j]=邊<i,j>之距離,若<i,j> E(G)。 COST[i][j]=∞ ,若<i,j> E(G)。 2. 設定MARK和DIST兩矩陣之初值,即對每一頂點令 MARK[i]=0; DIST[i]=COST[V][i]; 3. 處理起始頂點 V,即令 NODE=2; MARK[V]=1; DIST[V]= 0; 4. 當NODE < N 時重複步驟 5、6、7。 5. 選取一個頂點 U,使得 U 是所有未被選取之頂點中DIST[U]是最少 者,即 DIST[U] = min {DIST[W]},MARK[W] = 0。 6.將頂點 U 做上記號,即令 MARK[U]=1。 NODE = NODE+1。 7.更新剩餘未被選取的頂點(MARK[W]=0)之距離矩陣值,即令 DIST[W]=min{DIST[W],DIST[U]+COST[U][W]}。

16 最短路徑問題(The Shortest Path Problem)
從頂點0到其餘每一個頂點之最短徑和花費

17 最短路徑問題(The Shortest Path Problem)
頂點0到其餘頂點之最短距離選取過程 頂點0到其餘頂點之最短路徑和距離

18 最短路徑問題(The Shortest Path Problem)
任兩頂點對之最短距離 (All Pairs Shortest Paths) 設頂點編號為0,1,2,…,N-1 令A-1[i][j]=COST[i][j] 並求出AK[i][j] AK[i][j]= min{AK-1[i][j] + AK-1[i][k] + AK-1[k][j]},0≦k≦N-1。 A-1[i][j]是頂點 i 至頂點 j 之直通距離 AK[i][j]是頂點 i 到 j 的最短距離,並且此最短路徑所通過之頂點編號不超過K AN-1[i][j]便可知道任一頂點對之最短距離

19 最短路徑問題(The Shortest Path Problem)
任兩頂點對之最短距離 (All Pairs Shortest Paths) 由 A3 得知頂點 0 到頂點 3 之最短距離為 11, 頂點 3 到頂點 1 之最短距離為 2

20 工作網路和拓樸排序(Activity Network and Topological Sort)
頂點工作網路(Activity On Vertex Network),簡稱AOV網路 以頂點來代表工作項目 A、B、C、D、E分別代表五個工作項目 要待 A、B 都完成之後 C 才跟隨A、B 之後完成,因此稱A、B 為C的立即先行者(Immediate Predecessor) C為 A、B 的立即後繼者(Immediate Successor) 拓樸排序:維持AOV網路上各頂點之先後關係並依工作項目完成之先後加以排序 拓樸排序結果為 A、B、C、D、E 或 B、A、C、D、E。

21 有趣的圖形問題 柯尼斯伯格之橋 是否有人可以跨越7座橋去拜訪四個城市,且每座橋只經過一次 ? 尤拉定理:每個頂點的分支度皆為偶數時才可以

22 有趣的圖形問題 彌爾頓(Hamilton)圖形 圖形中是否存在一條路徑可以拜訪每個頂點恰好一次?
左圖:從 A 出發,經 B、C 到 D 恰好拜訪每個城市一次 左圖:無解 為漢彌爾頓圖形及尤拉圖形 非漢彌爾頓圖形但為尤拉圖形

23 有趣的圖形問題 平面圖 定理1:一個平面圖的區域度數總和等於兩倍邊數和。 定理2:(尤拉公式)一個平面圖滿足下列公式
頂點個數 - 邊數個數 + 區域個數 = 2 定理3:一個平面圖若邊的個數大於等於2,則滿足 3/2 * 區域個數 ≦ 邊的個數 ≦ 3 * 頂點個數 – 6 定理4:(庫托斯基定理) 一個圖形是非平面的若且唯若它含有一個和K3或K5同構之子圖, 其中 K3,K5均為設施圖。  

24 有趣的圖形問題 平面圖 (a)與(b)為平面圖 (c)非平面圖

25 有趣的圖形問題 彩色圖 N-可著色:一平面圖若最少要用 N 種顏色才能使相鄰區域之顏色互異 4-可著色
(a)相當於(b),是非平面圖,無法著色 (c)可改成(d),為一平面圖,可以著色


Download ppt "第7章 圖形與網路 資料結構設計與C++程式應用"

Similar presentations


Ads by Google