標籤:
轉載自:http://www.cnblogs.com/skywang12345/p/3691463.html
Ⅰ 圖的基本概念
1. 圖的定義
定義:圖(graph)是由一些點(vertex)和這些點之間的連線(edge)所組成的;其中,點通常被成為"頂點(vertex)",而點與點之間的連線則被成為"邊或弧"(edege)。通常記為,G=(V,E)。
2. 圖的種類
根據邊是否有方向,將圖可以劃分為:無向圖和有向圖。
2.1 無向圖
上面的圖G0是無向圖,無向圖的所有的邊都是不區分方向的。G0=(V1,{E1})。其中,
(01) V1={A,B,C,D,E,F}。 V1表示由"A,B,C,D,E,F"幾個頂點組成的集合。
(02) E1={(A,B),(A,C),(B,C),(B,E),(B,F),(C,F), (C,D),(E,F),(C,E)}。 E1是由邊(A,B),邊(A,C)...等等組成的集合。其中,(A,C)表示由頂點A和頂點C串連成的邊。
2.2 有向圖
上面的圖G2是有向圖。和無向圖不同,有向圖的所有的邊都是有方向的! G2=(V2,{A2})。其中,
(01) V2={A,C,B,F,D,E,G}。 V2表示由"A,B,C,D,E,F,G"幾個頂點組成的集合。
(02) A2={<A,B>,<B,C>,<B,F>,<B,E>,<C,E>,<E,D>,<D,C>,<E,B>,<F,G>}。 E1是由向量<A,B>,向量<B,C>...等等組成的集合。其中,向量<A,B)表示由"頂點A"指向"頂點C"的有向邊。
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。
4. 路徑和迴路
路徑:如果頂點(Vm)到頂點(Vn)之間存在一個頂點序列。則表示Vm到Vn是一條路徑。
路徑長度:路徑中"邊的數量"。
簡單路徑:若一條路徑上頂點不重複出現,則是簡單路徑。
迴路:若路徑的第一個頂點和最後一個頂點相同,則是迴路。
簡單迴路:第一個頂點和最後一個頂點相同,其它各頂點都不重複的迴路則是簡單迴路。
5. 連通圖和連通分量
連通圖:對無向圖而言,任意兩個頂點之間都存在一條無向路徑,則稱該無向圖為連通圖。 對有向圖而言,若圖中任意兩個頂點之間都存在一條有向路徑,則稱該有向圖為強連通圖。
連通分量:非連通圖中的各個連通子圖稱為該圖的連通分量。
6. 權
在學習"哈夫曼樹"的時候,瞭解過"權"的概念。圖中權的概念與此類似。
上面就是一個帶權的圖。
Ⅱ 圖的儲存結構
上面瞭解了"圖的基本概念",下面開始介紹圖的儲存結構。圖的儲存結構,常用的是"鄰接矩陣"和"鄰接表"。
1. 鄰接矩陣
鄰接矩陣是指用矩陣來表示圖。它是採用矩陣來描述圖中頂點之間的關係(及弧或邊的權)。
假設圖中頂點數為n,則鄰接矩陣定義為:
下面通過來進行解釋。
圖中的G1是無向圖和它對應的鄰接矩陣。
圖中的G2是無向圖和它對應的鄰接矩陣。
通常採用兩個數組來實現鄰接矩陣:一個一維數組用來儲存頂點資訊,一個二維數組來用儲存邊的資訊。
鄰接矩陣的缺點就是比較耗費空間。
2. 鄰接表
鄰接表是圖的一種鏈式儲存表示方法。它是改進後的"鄰接矩陣",它的缺點是不方便判斷兩個頂點之間是否有邊,但是相對鄰接矩陣來說更省空間。
圖中的G1是無向圖和它對應的鄰接矩陣。
圖中的G2是無向圖和它對應的鄰接矩陣。
PHP演算法 《圖》 之 理論基礎