1. 程式人生 > >基礎算法(六)——圖

基礎算法(六)——圖

一個 col 圖結構 gin 深度 關聯 src 最短 gif

一、圖的概念

圖是四類基本邏輯結構集合、線性結構、樹形結構和圖結構裏面的其中一種,即圖結構,圖結構也是其中最為復雜的結構。在圖的結構中,任意兩個結點之間都可能相關,即結點之間的鄰接關系是任意的。而在樹形結構中,結點之間具有層次關系,每一層結點只能和上一層中的至多一個結點相關,但可能和下一層的多個結點相關。圖的結構可以描述多種復雜的數據對象,應用較為廣泛。

二、各種術語

·有向圖、無向圖:圖G由兩個集合V和E組成,記為G=(V,E),其中,v是頂點的有窮非空集合;E是邊的集合,邊是v中頂點的偶對。若頂點的偶對是有序的則稱此圖為有向圖,有序偶對用尖括號<>括起來;反之,若頂點偶對是無序的,則稱此圖為無向圖,無序偶對用圓括號()括起來。

·權、帶權圖:圖的邊附帶數值,這個數值叫權。每條邊都帶權的圖稱為帶權圖。

·頂點的度、入度、出度:無向圖中頂點v的度是與該頂點相關的邊的數目。如果圖是一個有向圖,則把以頂點v為終點的弧的數目稱為v的入度,把以頂點v為始點的弧的數目稱為v的出度,入度+出度=有向圖的度。

·子圖:設G=(V,E)是一個圖,若E’是E的子集,V’是V的子集,並且E’中的邊僅與V’中的頂點相關聯,則圖G’=(V’,E’)稱為圖G的子圖。

·路徑、路徑長途:無向圖的路徑是一個頂點到另一個頂點所經過的邊,所經過的邊的數目稱為路徑長度;有向圖的路徑是一個頂點到另一個頂點的弧,路徑長度是路徑上面弧的數目。

·連同、連通圖、連通分量:在無向圖中,如果從頂點v到頂點v’有路徑,則稱v和v’是連通的。如果圖中的任意兩個頂點vi和vj都是連通的,則稱此圖為連通圖。

強連通、強連通圖、強連通分量:對於無向圖,如果圖中任意一對頂點vi和vj(i!=j)都有頂點vi到vj的路徑也有vj到v?的路徑,即兩個頂點雙向連通,那麽稱該有向圖為強連通圖。有向圖的極大強連通子圖稱為強連通分量。

·生成樹、生成森林:一個連通圖的生成樹,是含有該連通圖的全部頂點的一個極小連通子圖。若連通圖G的頂點個數為n,則G的生成樹的邊數為n-1。如果G的一個子圖G’的邊數大於n-1,則G’中一定有環。相反,如果G’的邊數小於n-1,則G’一定不連通。在非連通圖中,由每個連通分量都可得到一個極小連通子圖,即一棵生成樹,這些連通分量的生成樹組成了一個非連通圖的生成森林。

這些概念是在解題時必要的一些儲備,需要重點記憶與理解。

三、圖的存儲

1. 鄰接矩陣:圖的鄰接矩陣(Adjacency Matrix)表示是采用二維數組的方式。通過鄰接矩陣可以立刻看出兩頂點之間是否存在一條邊,只需要檢查鄰接矩陣重行i和列j是否是非零值。對於無向圖,鄰接矩陣是對稱的。

註:一個圖的鄰接矩陣是唯一的,但其鄰接表表示不唯一。這是因為鄰接表表示中,各邊表結點火器的鏈接次序取決於建立鄰接表的算法以及邊的輸入次序。也就是說,在鄰接表的每個線性鏈表中,各結點的順序是任意的。

技術分享

2. 鄰接表

技術分享

練習題:

1.在一個圖中,所有頂點的度數之和等於所有邊數的     倍。

A. 1/2  B. 1  C. 2  D. 4

2.在一個有向圖中,所有頂點的入度之和等於所有頂點的出度這和     倍。

A. 1/2  B. 1  C. 2  D. 4

3.一個有n個頂點的無向圖最多有     條邊。

A. n  B. n(n-1)  C. n(n-1)/2  D. 2n

4.具有4個頂點的無向完全圖有     條邊。

A. 6  B. 12  C. 16  D. 20

5.具有6個頂點的無向圖至少應有     條邊才能確保是一個連通圖。

A. 5  B. 6  C. 7  D. 8

6.在一個具有n個頂點的無向圖中,要連通全部頂點至少需要     條邊。

A. n  B. n+1  C. n-1  D. n/2

7.對於一個具有n個頂點的無向圖,若采用鄰接矩陣表示,則該矩陣的大小是     

A. n  B. (n-1)2  C. n-1  D. n2

8.對於一個具有n個頂點和e條邊的無向圖,若采用鄰接矩陣表示,則表頭向量的大小是   1 ;所有鄰接矩陣中的結點總數是 2

1 A. n  B. n+1  C. n-1  D. n+e

2 A. e/2  B. e  C. 2e  D. n+e

9.已知一個圖如圖所示,若從頂點a出發按深度搜索法進行遍歷,則可得到頂點序列為   1  ;按寬度搜索法進行遍歷,則可得到頂點序列為   2   

1 A. abecdf  B. acfebd  C. aebcfd  D. aedfcb

2 A. abcedf  B. abcefd  C. aebcfd  D. acfdeb

技術分享

第9題圖

10.已知一有向圖的鄰接表存儲結構如圖所示

(1)根據有向圖的深度優先遍歷算法,從v1頂點出發,所得到的頂點序列是  1  

(2)根據有向圖的寬度優先遍歷算法,從v1頂點出發,所得到的頂點序列是  2  

1 A. v1,v2,v3,v5,v4  B. v1,v2,v3,v4,v5

C. v1,v3,v4,v5,v2  D. v1,v4,v3,v5,v2

2 A. v1,v2,v3,v4,v5  B. v1,v3,v2,v4,v5

C. v1,v2,v3,v5,v4  D. v1,v4,v3,v5,v2

技術分享

第10題圖

11.采用鄰接表存儲的圖的深度優先遍歷算法類似於二叉樹的       

A. 先序遍歷  B. 中序遍歷  C. 後序遍歷 D. 按層遍歷

12.采用鄰接表存儲的圖的寬度優先遍歷算法類似於二叉樹的       

A. 先序遍歷  B. 中序遍歷  C. 後序遍歷 D. 按層遍歷

13.判定一個有向圖是否存在回路除了可以利用拓撲排序方法外,還可以利用     

A. 求關鍵路徑方法   B. 求最短路徑的Dijkstra方法

C. 寬度優先遍歷算法 D. 深度優先遍歷算法

填空題

1.n個頂點的連通圖至少     條邊。

2.在無權圖G的鄰接矩陣中,若 (vi, vj) 或 <vi, vj> 屬於圖G的邊集,則對應元素A[i][j] 等於    ,否則等於    

3.在無權圖G的鄰接矩陣中,若A[i][j]等於1,則等於A[j][i] =     

4. 已知圖G的鄰接表如圖所示,其從v1頂點出發的深度優先搜索序列為        ,其從v1頂點出發的寬度優先搜索序列為        

 技術分享

第4題圖

5.已知一圖的鄰接矩陣表示,計算第i個結點的入度的方法是

6.已知一圖的鄰接矩陣表示,刪除所有從第i個結點出發的邊的方法是

基礎算法(六)——圖