一,什么是圖
表示多對多的關系
圖包含一組頂點和一組邊(不考慮重邊和自回路)
二,圖的表示
鄰接矩陣表示圖:有邊的表示1,無邊的表示0
鄰接矩陣優點:
- 直觀
- 查找方便
- 查詢一個頂點的所有鄰接點方便
- 方便計算度(該頂點的邊數),入度,出度(有向圖需要查看行(出度)和列(入度))
鄰接矩陣缺點:
- 浪費空間:稀疏圖(點很多而邊很少)
- 浪費時間:
鄰接表:只存非零元素,不唯一,稀疏圖
三,圖的遍歷
DFS(深度優先搜索,Depth First Search): 原路返回=>樹的先序遍歷
BFS(廣度優先搜索,Breath First Search)=>樹的層次遍歷
連通:如果從v到w存在一條(無向)路徑,則稱v和w是連通的
路徑:v到w的路徑是一系列的頂點的集合,其中任一對相鄰的頂點間都有圖中的邊。路徑的長度是路徑中的邊數(如果帶權,則是所有邊的權重和)。如果v和w之間的所有頂點都不同,則稱簡單路徑(無回路)
回路:起點等於終點的路徑
連通圖:圖中任意兩頂點均連通
連通分量:無向圖中的極大連通子圖
強連通;有向圖中頂點v和w之間存在雙向路徑(既有從v->w又有從w->v,可以不是同一條),則稱v和w是強連通
弱連通:去掉方向后的v和w是連通的
強連通圖:有向圖中任意兩頂點均強連通
強連通分量:有向圖的極大強連通子圖
六度空間算法
中序遍歷和前序遍歷直接求后序遍歷
完全二叉搜索樹的核心代碼
最短路徑
網絡:帶權的圖,
- 單元最短路徑:固定源點;
- (有向)無權圖
- 遞增順序
- 遞增順序
- (有向)有權圖
- 負值圈(不考慮)
- Dijkstra算法
實現上述代碼中紅線偽代碼的方法
- (有向)無權圖
- 多元最短路徑:任意兩點
- 直接將單元最短路算法調用V遍
- Floyd算法
-
最小生成樹
定義:
稠密圖的貪心算法:Prim算法,從一個點一點一點向外擴張延伸,進入樹內的點的dist都為0,往外延伸時是與樹中任意一個結點距離最小
稀疏圖的貪心算法:每次從剩余所有邊中取最短的邊,所選邊不能構成回路
拓撲排序
1. AOV(Activity On Vertex) 網絡
算法部分: