圖G由頂點集V和邊集E組成,記為G=(V,E)
圖不可為空,一定有頂點集不為空
有向圖:有向邊(弧)的有限集合
無向圖:無向邊的有限集合
連通:頂點V到頂點V'有路徑
連通分量:無向圖中的極大連通子圖(極大:1.頂點足夠多;2.極大連通子圖包含依附這些點的所有邊)
強連通分量:有向圖中的極大強連通子圖
連通的生成樹:包含圖中的全部n個頂點,但只有n-1條邊的極小連通子圖
度:以該頂點為一個端點的邊數目
入度(ID):以頂點為終點的有向邊數目
出度(OD):以頂點為起點的有向邊數目
圖的存儲結構
鄰接矩陣(順序存儲)
頂點:用一維數組存儲 邊/弧:用二維數組存儲
#define MaxVertexNum 100 //頂點數目最大值 typedef char VertexType; //頂點的數據類型項,不同情況不一樣 typedef int EdgeType; //整數表示權值或者連通性 typedef struct{ VertexType Vex[MaxVertexNum]; //頂點表 EdgeType [MaxVertexNum][MaxVertexNum]; //鄰接矩陣 int vexnum,arcnum; //圖的當前頂點數和弧數 }MGraph
鄰接表:存儲的無向圖中查找頂點容易,但是修改邊或者查詢邊需要遍歷鏈表。
圖的遍歷
從圖中某一頂點出發,訪遍圖中其余頂點,且使每一個頂點僅被訪問一次。
BFS(廣度優先遍歷):類似於樹的層序遍歷算法
時間復雜度:
鄰接表:每個頂點入隊一次,O(|V|),對於每個頂點,搜索其鄰接點,所以訪問該頂點所有邊,O(|E|),所以總時間復雜度O(|V|+|E|)。
鄰接矩陣:每個頂點入隊一次,O(|V|),對於每個頂點,搜索其鄰接點,所以遍歷矩陣,O(|V|),所以總時間復雜度O(|V|2|)。
DFS(深度優先遍歷):類似於樹的先序遍歷算法。
鄰接表:每個頂點入隊一次,O(|V|),對於每個頂點,搜索其鄰接點,所以訪問該頂點所有邊,O(|E|),所以總時間復雜度O(|V|+|E|)。
鄰接矩陣:每個頂點入隊一次,O(|V|),對於每個頂點,搜索其鄰接點,所以遍歷矩陣,O(|V|),所以總時間復雜度O(|V|2|)。
總結