圖的概念:
包含
- 一組頂點:通常用V(Vertext)表示頂點集合
- 一組邊:通常用E(Edge)表示邊的集合
邊是頂點隊:(v, w)∈ E, 其中v,w∈V
有向邊
抽象數據類型定義
類型名稱:圖(Graph)
數據對象集:G(V, E)由一個非空的有限頂點集合V和一個有限邊集合E組成。
操作集:對任意圖G∈Graph,以及v∈V, e∈E
-Graph Create( ):建立並返回空圖;
-Graph InsertVertext(Graph G, Vertex v):將v插入G;
-Graph InsertEdge(Graph G, Edge e):將e插入G;
- void DFS(Graph G, Vertext v):從頂點出發深度優先遍歷圖G;
- void BFS(Graph G, Vertext v):從頂點v出發寬度優先遍歷圖G;
- void ShortestPath(Graph G, Vertex v, int Dist[]):計算圖G中頂點v到任意其他頂點的最短距離;
圖的表示
例如如下一張圖:
該怎麼在程序中表示他們的呢?
實際上我們想要表示的是這些頂點之間的關係。
但是這又怎麼表呢?
其實可以使用鄰接矩陣來表示:
鄰接矩陣G[N][N]——N 個頂點從0 到N-1 編號
G[i][j] =1 若<v i ,v j > 是G的邊
G[i][j] = 0 若<v i ,v j > 不是G的邊
使用矩陣表示下來之後就是這個樣子:
但是對於這樣一個圖表示之後我們會發現沿着對角線是對稱的,爲什麼呢?
實際上這種表示方法將兩個頂點之間的邊表示兩次,這是無向圖,就比較的浪費空間,我們就可以在計算機中存儲矩陣的一部分例如:
這樣就可節省很多空間: