圖的表示法:鄰接矩陣和鄰接鏈表的實現

本章主要來討論圖在數據結構中的表示方法。構成圖的兩個元素是頂點的有限集合和邊的有限集合,頂點也稱節點。邊的表示格式爲 (u, v),對於無向圖,邊是沒有順序的,所以 (u, v) 和 (v, u) 是相同的。但是在有向圖中,邊是有順序的,所以 (u, v) 和 (v, u) 代表不同的邊。此外,邊還有一個屬性,就是邊的權重(也可稱爲值或代價等)。

在現實世界中,圖可用於表示網絡,如城市和道路構成的網絡、社交網絡等。

下圖是一個有 5 個頂點的圖

數據結構中,圖常用的表示方法有鄰接矩陣和鄰接鏈表,用的比較少的是關聯矩陣和關聯鏈表。

 

1.鄰接矩陣

鄰接矩陣是用二維數組表示的,如果頂點數爲 V,那麼鄰接矩陣大小就是 V x V,設矩陣爲 adj[][],則 adj[i][j]=1 表示頂點 i 和頂點 j 之間有一條邊。無向圖的鄰接矩陣總是對稱的,鄰接矩陣還可以用來表示圖的權重,如 adj[i][j]=w,表示頂點 i 和頂點 j 之間的邊的權重爲 w。

前面的圖的鄰接矩陣如下

用鄰接矩陣表示圖的好處是實現比較簡單,刪除邊只用 O(1) 的時間,查詢頂點之間有沒有邊也只需 O(1) 的時間。不好的地方就是需要 O(V^2) 的存儲空間,對於稀疏圖(邊很少的圖)也一樣,添加一個頂點需要 O(V^2) 的時間。

 

2.鄰接鏈表

用鄰接鏈表表示圖時,需要一個數組鏈表,數組的大小和頂點的個數相等,假設數組爲 array[],那麼 array[i] 表示第 i 個頂點的鄰接節點。鄰接鏈表也可以表示權重信息,權重信息就保存在鏈表的節點信息上。下面的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章