一、圖的定義
1、圖的介紹
圖是一種網狀數據結構,圖是由非空集合和一個描述頂點之間關係的集合組成。定義形式如下:
Graph = (V,E)
V = {x|x屬於某個數據對象} , V是具有相同特性的數據元素集合。
E ={<u,v>|P(u,v)^(u,v屬於V)} , E是兩個頂點之間關係的集合
圖由頂點集V(G)和邊集E(G)組成,記爲G=(V,E)。其中E(G)是邊的有限集合,邊是頂點的無序對(無向圖)或有序對(有向圖)。
對有向圖來說,E(G)是有向邊(也稱弧(Arc))的有限集合,弧是頂點的有序對,記爲<v,w>,v、w是頂點,v爲弧尾(箭頭根部),w爲弧頭(箭頭處)。
對無向圖來說,E(G)是邊的有限集合,邊是頂點的無序對,記爲(v, w)或者(w, v),並且(v, w)=(w,v)。
2、加權圖
在圖的應用中,圖不但需要可以表現元素之間的關係。還需要邊有一定的實際意義,如果圖的每條邊賦予相關的實數,稱爲權。
二、圖的存儲
1、鄰接矩陣:
用二位數組 順序結構 存儲。
2、鄰接表
用鏈表。鏈式存儲結構
三、圖的遍歷
1、深度優先遍歷(DFS)
結果:A B E F C D G H I
深度優先遍歷,類似於樹的先根遍歷(可以採用遞歸遍歷,也可以藉助棧的非遞歸遍歷)
2、廣度優先遍歷(BFS)
結果:A B C D E F G H I
廣度優先遍歷,類似於樹的層次遍歷(可以採用藉助隊列的非遞歸遍歷)
3、最短路徑
1、最短路徑(1)
-
段數最少的最短路徑:
生活案例:地鐵,公交,最少換乘
解決方法:使用廣度優先搜索即可
類似於樹的層次遍歷,需要藉助隊列實現
2、最短路徑(2)
-
權值最小的最短路徑:
生活案例:時間最少,距離最近(這些都要取決於權值得含義)
解決方法:使用迪克斯特拉算法