- 參考文章:鍵盤上的鋼琴師_v5的博客
文章目錄
相關定義
圖、頂點、鄰接關係(邊)
圖 graph 是由頂點的有窮非空集合和頂點之間邊的集合組成, 通常表示爲: 其中,G表示一個圖,V是圖G中 頂點 vertex 的集合,E是圖G中 邊 的集合。
- 線性結構中,元素僅有線性關係,每個元素只有一個直接前驅和直接後繼,邏輯關係爲“前驅-後繼”;
- 樹形結構中,數據元素(結點)之間有着明顯的層次關係,每層上的元素可能和下一層中多個元素相關,但只能和上一層中一個元素相關。邏輯關係爲“parent-child”;
- 圖形結構中,數據元素(頂點)之間具有任意關係,圖中任意兩個數據元素之間都可能相關,邏輯關係稱爲 鄰接 adjacent
有向圖、無向圖、網
-
無向邊 undirected:若頂點Vi到Vj之間的邊沒有方向,則稱這條邊爲無向邊,用無序偶對 來表示,則左側無向圖表示爲:,其中頂點的集合; 邊的集合
-
有向邊 directed:若從頂點 到的邊有方向,則稱這條邊爲有向邊,也稱爲 弧, 用有序偶 來表示, 稱爲弧尾,稱爲弧頭,即指向。 如果圖中任意兩個頂點之間的邊都是有向邊,則稱該圖爲有向圖。 右側有向圖表示爲:,其中頂點集合; 弧集合
-
網 或 有權圖:每條邊上帶有 權weight 的圖,也分有向和無向。
-
完全無向圖:該無向圖中任意兩個頂點之間都存在邊,n個頂點共含有 條邊;
-
完全有向圖:該有向圖中任意兩個頂點之間都存在方向相反的兩條弧,n個頂點共含有 條邊;
圖的抽象數據類型
圖的存儲結構
鄰接矩陣
鄰接表
鄰接矩陣和鄰接表的比較
以無向圖爲例,含有n個頂點e條邊:
- 空間複雜度:鄰接矩陣 ,鄰接表
- 訪問鄰接點的平均時間複雜度:鄰接矩陣 ,鄰接表
- 唯一性:頂點編號確定後,鄰接矩陣是唯一的,鄰接表不是,取決於創建圖時的輸入次序和頂點在邊表的插入算法。
圖的遍歷方式
從圖中某一頂點出發訪遍圖中其餘頂點,且使每一個頂點僅被訪問一次,這一過程就叫做圖的遍歷。
深度優先搜索 DFS
從圖中某個頂點v出發,訪問此頂點,然後從v的未被訪問的鄰接點出發深度優先遍歷圖,直至圖中所有和v 有路徑相通的頂點都被訪問到。
廣度優先搜索 BFS
廣度優先遍歷就類似於樹的層序遍歷。