數據結構學習筆記------圖

** 主要掌握深度優先搜索與廣度優先搜索的程序設計 **
掌握圖的基本概念及基本性質(度、路徑長度、迴路、路徑等)、圖的存儲結構及其特性。
存儲結構之間的轉化、基於存儲結構上的遍歷操作和各種應用
(拓撲排序:AOV網
最小生成樹:Prim算法、Kruskal算法
最短路徑:Dijkstra算法、Floyd算法
關鍵路徑: AOE網
)等。
重點掌握其基本思想和實現步驟,而算法的具體實現則不重要
結合圖的實例考查算法的具體執行過程,
必須學會對給定的圖手工模擬各個算法的執行過程。
還需掌握對於給定的模型建立相應的圖去解決問題的方法

圖的定義:
圖G由頂點集V和邊集E組成, 記爲G=(V, E),
V(G) 表示圖G中頂點的有限非空集,若V={V1,V2,…,Vn},用|V|表示圖G中頂點的個數,也稱爲圖G的階
E(G) 表示圖G中頂點之間的關係(邊)集合,E={(u,v)|u∈V,v∈V},用|E|表示圖G中邊的條數

完全圖(簡單完全圖)
無向完全圖: 如果任意兩個頂點之間都存在邊;含有n個頂點的無向完全圖有n(n-1)/2條邊
有向完全圖: 如果任意兩個頂點之間都存在方向相反的兩條弧; 含有n個頂點的有向完全圖有n(n-1)條有向邊

頂點的度、入度和出度:
圖中每個頂點的度定義爲以該頂點爲一個端點的數目
對於有向圖: 頂點v的度分爲入度和出度,頂點v的度等於其入度和出度之和

邊的權和網
在一個圖中,每條邊都可以標上具有某種含義的數值,該數值稱爲該邊的權值、
這種邊上帶有權值的圖稱爲帶權圖,也稱做網。

圖的存儲結構:
數組表示法(鄰接矩陣):有向圖和無向圖的順序存儲
鄰接表(Adjacency List):有向圖和無向圖的鏈式存儲
十字鏈表(Orthogonal List):是有向圖的另一種鏈式存儲結構
鄰接多重表(Adjacency Multilist):是無向圖的另一種鏈式存儲結構。

圖的基本操作:
(獨立於圖的存儲結構, 不同的存儲方式,操作算法的具體實現會有着不同的性能)
考慮不同的存儲方式,具體算法的實現,以及採用何種存儲方式的算法效率會更高
Adjacent(G, x, y); 判斷圖G是否存在邊<x, y>或(x, y)
Neighbors(G, x); 列出圖G中與結點x鄰接的邊
InsertVertex(G, x); 在圖G中插入頂點x
DeleteVertex(G, x); 從圖G中刪除頂點x
AddEdge(G, x, y); 如果無向邊(x, y) 或有向邊<x, y>不存在,則向圖G中添加該邊
RemoveEdge(G, x, y); 如果無向邊(x, y) 或有向邊<x, y>存在,則從圖G中刪除該邊
FirstNeighbot(G, x); 求圖G中頂點x的第一個鄰接點,若有則返回頂點號。
若x沒有鄰接點或圖中不存在x,則返回-1
NextNeighbor(G, x, y); 假設圖G中頂點y是頂點x的一個鄰接點,返回除y之外頂點x的
下一個鄰接點a的頂點號,若y是x的最後一個鄰接點,則返回-1
Get_edge_value(G, x, y);獲取圖G中邊(x, y)或<x, y>對應的權值
Set_edge_value(G, x, y, v);設置圖G中邊(x, y)或<x, y>對應的權值爲v
圖的遍歷算算法 按照某種方式訪問圖中每一個頂點且僅訪問一次。
(包括深度優先遍歷和廣度優先遍歷)

DFS的具體實現:
基本概念: 連通分量, 強連通分量
G(V,E) : V—頂點的有窮非空集合,E—頂點之間的一條邊
連通分量: 在無向圖中,如果兩個頂點間可以互相到達(可以是通過一定路徑間接到達),
那麼就稱這兩個頂點連通。 如果圖G(V,E)的任意兩個頂點都連通,則稱圖G爲連通圖;
否則,稱G爲非連通圖,且稱其中的極大連通子圖爲連通分量。

強連通分量: 在有向圖中,如果兩個頂點可以各自通過一條有向路徑到達另一個頂點,
就稱這兩個頂點強連通。如果圖G(V,E)的任意兩個頂點都強連通,則稱圖G爲強連通圖;
否則,稱圖G爲非強連通圖,且稱其中的極大強連通子圖爲強連通分量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章