圖的理論基礎


本章介紹數據結構中圖的基本概念。

目錄
1. 圖的基本概念
2. 圖的存儲結構

轉載請注明出處:http://www.cnblogs.com/skywang12345/

更多內容:數據結構與算法系列 目錄

圖的基本概念

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是無向圖和它對應的鄰接矩陣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM