基礎概念
G=(V, E)
如果無向圖中從每一個頂點到其他每個頂點都存在一條路徑,則稱該無向圖是連通的(connected)。具有這樣性質的有向圖稱為是強連通的的(strongly connected)。如果有向圖不是強連通的,但它的基礎圖(underlying graph)(也就是其弧上去掉方向說形成的圖)是連通的,那么稱該有向圖是弱連通的(weakly connected)。完全圖(complete graph)是其每一對頂點間都存在一條邊的圖。
存儲表示方式
-
鄰接矩陣
-
使用|V|*|V|的二維數組來表示圖,g[i][j]=1表示定點i到頂點j右邊,0則無。(對於無向圖,二維矩陣是對稱的,對角線都為0)
-
這種表示方法,查找兩點間是否有邊的復雜度為O(n^2),而且處理邊數較少的圖時效率不高(稀疏矩陣)
-
-
鄰接表
-
鄰接多重表(主要用於存儲無向圖)
對無向圖而言,其鄰接多重表和鄰接表的差別,僅僅在於同一條邊在鄰接表中用兩個結點表示,而在鄰接多重表中只有一個結點。
遍歷(搜索)(可用於判斷無向圖是否連通)(或用於求解連通圖的最小生成樹算法)
-
廣度優先搜索
-
深度優先搜索
拓撲排序
最短路徑算法
-
深度或廣度優先搜索算法(解決單源最短路徑)
-
Floyd算法
-
Dijkstra算法
-
Bellman-Ford算法(解決負權邊,解決單源最短路徑,前幾種方法不能求含負權邊的圖)