淺談數據結構之圖(一)

淺談數據結構之圖(一)

基本概念

1. 圖的定義
圖(graph)是由一些點(vertex)和這些點之間的連線(edge)所組成的;其中,點通常被成爲"頂點(vertex)",而點與點之間的連線則被成爲"邊或弧"(edege)。通常記爲,G=(V,E)。
2. 圖的種類
根據邊是否有方向,將圖可以劃分爲:無向圖有向圖
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述
3. 鄰接點和度
3.1 鄰接點
一條邊上的兩個頂點叫做鄰接點。
例如,上面無向圖G0中的頂點A和頂點C就是鄰接點。
在有向圖中,除了鄰接點之外;還有"入邊"和"出邊"的概念。 頂點的入邊,是指以該頂點爲終點的邊。而頂點的出邊,則是指以該頂點爲起點的邊。
例如,上面有向圖G2中的B和E是鄰接點;<B,E>是B的出邊,還是E的入邊。
3.2 度
在無向圖中,某個頂點的度是鄰接到該頂點的邊(或弧)的數目。
例如,上面無向圖G0中頂點A的度是2。
在有向圖中,度還有"入度"和"出度"之分。 某個頂點的入度,是指以該頂點爲終點的邊的數目。而頂點的出度,則是指以該頂點爲起點的邊的數目。 頂點的度=入度+出度。
例如,上面有向圖G2中,頂點B的入度是2,出度是3;頂點B的度=2+3=5。

圖的存儲結構

1. 鄰接矩陣
鄰接矩陣是指用矩陣來表示圖。它是採用矩陣來描述圖中頂點之間的關係(及弧或邊的權)。 假設圖中頂點數爲n,則鄰接矩陣定義爲:
在這裏插入圖片描述
通常採用兩個數組來實現鄰接矩陣:一個一維數組用來保存頂點信息,一個二維數組來用保存邊的信息。 鄰接矩陣的缺點就是比較耗費空間。
在這裏插入圖片描述
在這裏插入圖片描述
2. 鄰接表
鄰接表是圖的一種鏈式存儲表示方法。它是改進後的"鄰接矩陣",它的缺點是不方便判斷兩個頂點之間是否有邊,但是相對鄰接矩陣來說更省空間。
在這裏插入圖片描述
在這裏插入圖片描述

圖的遍歷

深度優先遍歷
圖的深度優先搜索(Depth First Search),和樹的前序遍歷比較類似。
它的思想:假設初始狀態是圖中所有頂點均未被訪問,則從某個頂點v出發,首先訪問該頂點,然後依次從它的各個未被訪問的鄰接點出發深度優先搜索遍歷圖,直至圖中所有和v有路徑相通的頂點都被訪問到。 若此時尚有其他頂點未被訪問到,則另選一個未被訪問的頂點作起始點,重複上述過程,直至圖中所有頂點都被訪問到爲止。
顯然,深度優先搜索是一個遞歸的過程。

在這裏插入圖片描述
廣度優先遍歷
廣度優先搜索算法(Breadth First Search),又稱爲”寬度優先搜索”或”橫向優先搜索”,簡稱BFS。
它的思想是:從圖中某頂點v出發,在訪問了v之後依次訪問v的各個未曾訪問過的鄰接點,然後分別從這些鄰接點出發依次訪問它們的鄰接點,並使得“先被訪問的頂點的鄰接點先於後被訪問的頂點的鄰接點被訪問,直至圖中所有已被訪問的頂點的鄰接點都被訪問到。如果此時圖中尚有頂點未被訪問,則需要另選一個未曾被訪問過的頂點作爲新的起始點,重複上述過程,直至圖中所有頂點都被訪問到爲止。
換句話說,廣度優先搜索遍歷圖的過程是以v爲起點,由近至遠,依次訪問和v有路徑相通且路徑長度爲1,2…的頂點。
在這裏插入圖片描述

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