北京理工大學(xué)數(shù)據(jù)結(jié)構(gòu).ppt_第1頁(yè)
北京理工大學(xué)數(shù)據(jù)結(jié)構(gòu).ppt_第2頁(yè)
北京理工大學(xué)數(shù)據(jù)結(jié)構(gòu).ppt_第3頁(yè)
北京理工大學(xué)數(shù)據(jù)結(jié)構(gòu).ppt_第4頁(yè)
北京理工大學(xué)數(shù)據(jù)結(jié)構(gòu).ppt_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第7章 圖,第7章 圖,7.1 圖的定義和術(shù)語(yǔ) 7.2 圖的存儲(chǔ)結(jié)構(gòu) 7.3 圖的遍歷 7.4 圖的最小生成樹,第 3 頁(yè),7.1 圖的定義與術(shù)語(yǔ),一、圖的定義 1、圖(Graph)圖G是由兩個(gè)集合V(G)和E(G)組成的,記為G=(V,E) 其中:V(G)是頂點(diǎn)的非空有限集 E(G)是邊的有限集合,邊是頂點(diǎn)的無(wú)序?qū)蛴行驅(qū)Α?圖的分類 有向圖 無(wú)向圖,第 4 頁(yè),7.1 圖的定義與術(shù)語(yǔ),2、有向圖有向圖G是由兩個(gè)集合V(G)和E(G)組成的。 其中:V(G)是頂點(diǎn)的非空有限集。 E(G)是有向邊(也稱?。┑挠邢藜?,弧是頂點(diǎn)的有序?qū)Γ洖?,v,w是頂點(diǎn),v為弧尾,w為弧頭。,第 5 頁(yè),7.

2、1 圖的定義與術(shù)語(yǔ),例如: G1 = V1 = A, B, C, D, E E1 = , , , , , , ,E,A,C,B,D,第 6 頁(yè),7.1 圖的定義與術(shù)語(yǔ),3、無(wú)向圖無(wú)向圖G是由兩個(gè)集合V(G)和E(G)組成的。 其中:V(G)是頂點(diǎn)的非空有限集。 E(G)是邊的有限集合,邊是頂點(diǎn)的無(wú)序?qū)?,記?(v,w) 或 (w,v),并且(v,w)=(w,v)。,第 7 頁(yè),7.1 圖的定義與術(shù)語(yǔ),例如: G2 = V2 = v0 ,v1,v2,v3,v4 E2 = (v0,v1), (v0,v3), (v1,v2), (v1,v4), (v2,v3), (v2,v4) ,V0,V4,V3,

3、V1,V2,第 8 頁(yè),7.1 圖的定義與術(shù)語(yǔ),例如: G2 = V2 = v0,v1,v2,v3 E2 = , , , ,V(G1) = 1 , 2 , 3 , 4 , 5, 6 E(G1) = , , , , , , ,第 9 頁(yè),7.1 圖的定義與術(shù)語(yǔ),圖的應(yīng)用舉例 例1、交通圖(公路、鐵路) 頂點(diǎn):地點(diǎn)邊:連接地點(diǎn)的路 例2、電路圖 頂點(diǎn):元件邊:連接元件之間的線路 例3、通訊線路圖 頂點(diǎn):地點(diǎn)邊:地點(diǎn)間的連線 例4、各種流程圖 如產(chǎn)品的生產(chǎn)流程圖。 頂點(diǎn):工序邊:各道工序之間的順序關(guān)系,第 10 頁(yè),7.1 圖的定義與術(shù)語(yǔ),二、圖的基本術(shù)語(yǔ) 1、鄰接點(diǎn)及關(guān)聯(lián)邊 鄰接點(diǎn):邊的兩個(gè)頂點(diǎn)

4、關(guān)聯(lián)邊:若邊e= (v, u), 則稱頂點(diǎn)v、u 關(guān)聯(lián)邊e 2、頂點(diǎn)的度、入度、出度 頂點(diǎn)V的度 = 與V相關(guān)聯(lián)的邊的數(shù)目 在有向圖中: 頂點(diǎn)V的出度 = 以V為起點(diǎn)有向邊數(shù) 頂點(diǎn)V的入度 = 以V為終點(diǎn)有向邊數(shù) 頂點(diǎn)V的度 = V的出度+V的入度 設(shè)圖G 的頂點(diǎn)數(shù)為 n,邊數(shù)為 e 圖的所有頂點(diǎn)的度數(shù)和 = 2*e (每條邊對(duì)圖的所有頂點(diǎn)的度數(shù)和“貢獻(xiàn)”2度),e,第 11 頁(yè),7.1 圖的定義與術(shù)語(yǔ),3、路徑、回路 無(wú)向圖 G =(V,E)中的頂點(diǎn)序列v1, v2, , vk,若 (vi, vi+1)E ( i=1, 2, , k-1),v=v1, u=vk,則稱該序列是從頂點(diǎn)v到頂點(diǎn)u的

5、路徑;若v=u,則稱該序列為回路。,路徑:V0, V1, V2, V3 回路:V0, V1, V2, V3, V0,第 12 頁(yè),7.1 圖的定義與術(shù)語(yǔ),3、路徑、回路 有向圖 D =(V,E)中的頂點(diǎn)序列 v1, v2, , vk,若 E (i=1, 2, , k-1),v=v1,u=vk,則稱該序列是從頂點(diǎn)v到頂點(diǎn)u的路徑;若v=u,則稱該序列為回路。,路徑:V0, V2, V3 回路:V0, V2, V3, V0,第 13 頁(yè),7.1 圖的定義與術(shù)語(yǔ),4、連通圖(強(qiáng)連通圖) 在無(wú)(有)向圖 G= 中,若對(duì)任何兩個(gè)頂點(diǎn) v、u 都存在從 v 到 u 的路徑,則稱G是連通圖(強(qiáng)連通圖),非連

6、通圖,連通圖,強(qiáng)連通圖,非強(qiáng)連通圖,第 14 頁(yè),7.1 圖的定義與術(shù)語(yǔ),5、子圖 設(shè)有兩個(gè)圖 G=(V,E),G1=(V1,E1),若V1 V,E1 E,而且E1關(guān)聯(lián)的頂點(diǎn)都在 V1 中,則稱 G1 是 G 的子圖;,(b)、(c) 都是 (a) 的子圖,第 15 頁(yè),7.1 圖的定義與術(shù)語(yǔ),6、連通分量(強(qiáng)連通分量):無(wú)(有)向圖的極大(強(qiáng))連通子圖。 極大(強(qiáng))連通子圖:該子圖是(強(qiáng))連通子圖,若再將G的任何不在該子圖中的頂點(diǎn)加入,子圖就不再(強(qiáng))連通。,第 16 頁(yè),7.1 圖的定義與術(shù)語(yǔ),強(qiáng)連通分量,非連通圖,第 17 頁(yè),7.1 圖的定義與術(shù)語(yǔ),7、生成樹 包含無(wú)向圖 G 所有頂點(diǎn)

7、的極小連通子圖稱為G生成樹。 極小連通子圖意思是:該子圖是G的連通子圖,在該子圖中刪除任何一條邊,子圖不再連通。,G1的生成樹,章,連通 所有頂點(diǎn) 無(wú)回路,第 18 頁(yè),7.2 圖的存儲(chǔ)結(jié)構(gòu),一、數(shù)組表示法(鄰接矩陣表示) 鄰接矩陣:G的鄰接矩陣是滿足如下條件的n階矩陣:,在數(shù)組表示法中,用鄰接 矩陣表示頂點(diǎn)間的關(guān)系,第 19 頁(yè),7.2 圖的存儲(chǔ)結(jié)構(gòu),二、鄰接表:圖的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu) 1、無(wú)向圖的鄰接表 頂點(diǎn):通常按編號(hào)順序?qū)㈨旤c(diǎn)數(shù)據(jù)存儲(chǔ)在一維數(shù)組中; 關(guān)聯(lián)同一頂點(diǎn)的邊:用線性鏈表存儲(chǔ)。,第 20 頁(yè),typedef struct tnode /表頭結(jié)點(diǎn) int vexdata; ArcNode

8、 * firstarc; VNode, AdjList MAX_VERTEX_NUM ;,7.2 圖的存儲(chǔ)結(jié)構(gòu),typedef struct ArcNode/鏈表結(jié)點(diǎn) int adjvex; struct ArcNode *next; ArcNode;,typedef struct/圖 AdjList vertices; int vexnum, arcnum; / 頂點(diǎn)數(shù)和弧數(shù) int kind; / 圖的種類 ALGraph;,第 21 頁(yè),7.2 圖的存儲(chǔ)結(jié)構(gòu),無(wú)向圖的鄰接表的特點(diǎn) 1)在G鄰接表中,同一條邊對(duì)應(yīng)兩個(gè)結(jié)點(diǎn); 2)頂點(diǎn)v的度:等于v對(duì)應(yīng)線性鏈表的長(zhǎng)度; 3)判定兩頂點(diǎn)v ,u

9、是否鄰接:要看v對(duì)應(yīng)線性鏈表中有無(wú)對(duì)應(yīng)的結(jié)點(diǎn)。 4)在G中增減邊:要在兩個(gè)單鏈表插入、刪除結(jié)點(diǎn); 5)設(shè)存儲(chǔ)頂點(diǎn)的一維數(shù)組大小為 m(m圖的頂點(diǎn)數(shù)n),圖的邊數(shù)為 e,G占用存儲(chǔ)空間為:m+2*e。G占用存儲(chǔ)空間與G的頂點(diǎn)數(shù)、邊數(shù)均有關(guān);適用于邊稀疏的圖。,第 22 頁(yè),7.2 圖的存儲(chǔ)結(jié)構(gòu),2、有向圖的鄰接表 頂點(diǎn):用一維數(shù)組存儲(chǔ)(按編號(hào)順序) 以同一頂點(diǎn)為起點(diǎn)的?。河镁€性鏈表存儲(chǔ),adjvex,next,類似于無(wú)向圖的鄰接表,所不同的是: 以同一頂點(diǎn)為起點(diǎn)的?。河镁€性鏈表存儲(chǔ)。,第 23 頁(yè),7.2 圖的存儲(chǔ)結(jié)構(gòu),3、有向圖的逆鄰接表 頂點(diǎn):用一維數(shù)組存儲(chǔ)(按編號(hào)順序) 以同一頂點(diǎn)為終點(diǎn)的

10、弧:用線性鏈表存儲(chǔ)。,類似于有向圖的鄰接表,所不同的是: 以同一頂點(diǎn)為終點(diǎn)?。河镁€性鏈表存儲(chǔ),章,第 24 頁(yè),7.3 圖的遍歷,連通圖的深度遍歷(DFS) 從圖中某頂點(diǎn)v出發(fā): 1)訪問頂點(diǎn)v; 2)對(duì)v的每個(gè)未被訪問的鄰接點(diǎn)wj,從wj出發(fā),繼續(xù)對(duì)圖進(jìn)行深度優(yōu)先遍歷。,深度遍歷: V1,V2,V4,V5,V8,V3,V6,V7,例,深度遍歷: V1,V3,V6,V7,V2,V5,V8,V4,第 25 頁(yè),7.3 圖的遍歷,圖的深度遍歷(DFS),V,w1,SG1,SG2,SG3,w2,w3,w2,W1、W2和W3 均為 V 的鄰接點(diǎn),SG1、SG2 和 SG3 分別為含頂點(diǎn)W1、W2和W3

11、 的子圖。,訪問頂點(diǎn) V : for (W1、W2、W3 ) 若該鄰接點(diǎn)W未被訪問, 則從它出發(fā)進(jìn)行深度優(yōu)先搜索遍歷。,第 26 頁(yè),7.3 圖的遍歷,圖的深度遍歷(DFS),V,w1,SG1,SG2,SG3,w2,w3,w2,從圖解可見:,1. 從深度優(yōu)先搜索遍歷連通圖的過程類似于樹的先根遍歷;,解決的辦法是:為每個(gè)頂點(diǎn)設(shè)立一個(gè) “訪問標(biāo)志 visitedw”。,2. 如何判別V的鄰接點(diǎn)是否被訪問?,第 27 頁(yè),7.3 圖的遍歷,Boolean visitedMAX; / 訪問標(biāo)志數(shù)組 Status (*VisitFunc)(int v); / 訪問函數(shù) void DFS ( Graph

12、G, int v) / 從頂點(diǎn)v出發(fā),深度優(yōu)先搜索遍歷連通圖 G visitedv = TRUE; VisitFunc(v); for ( w=FirstAdjVex(G, v);w=0; w=NextAdjVex(G,v,w) ) if ( !visitedw ) DFS(G, w); / 對(duì)v的尚未訪問的鄰接頂點(diǎn)w / 遞歸調(diào)用DFS / DFS,第 28 頁(yè),7.3 圖的遍歷,非連通圖的深度優(yōu)先搜索遍歷 首先將圖中每個(gè)頂點(diǎn)的訪問標(biāo)志設(shè)為 FALSE,之后搜索圖中每個(gè)頂點(diǎn),如果未被訪問,則以該頂點(diǎn)為起始點(diǎn),進(jìn)行深度優(yōu)先搜索遍歷,否則繼續(xù)檢查下一頂點(diǎn)。,第 29 頁(yè),7.3 圖的遍歷,voi

13、d DFSTraverse ( Graph G, Status (*Visit) (int v) / 對(duì)圖 G 作深度優(yōu)先遍歷。 VisitFunc = Visit; for ( v=0; vG.vexnum; +v ) visitedv = FALSE; / 訪問標(biāo)志數(shù)組初始化 for ( v=0; vG.vexnum; +v ) if (!visitedv) DFS(G, v); / 對(duì)尚未訪問的頂點(diǎn)調(diào)用DFS ,第 30 頁(yè),7.3 圖的遍歷,例如:,a,b,c,h,d,e,k,f,g,F F F F F F F F F,T,T,T,T,T,T,T,T,T,a,c,h,d,k,f,e,b

14、,g,a,c,h,k,f,e,d,b,g,訪問標(biāo)志:,訪問次序:,a b c d e f g h k,0 1 2 3 4 5 6 7 8,第 31 頁(yè),7.3 圖的遍歷,圖的深度遍歷(DFS),深度遍歷:V1,V3 ,V7 ,V6 ,V2 ,V4 ,V8 ,V5,第 32 頁(yè),7.3 圖的遍歷,圖的廣度遍歷(BFS) 從圖中的某個(gè)頂點(diǎn)V0出發(fā),并在訪問此頂點(diǎn)之后依次訪問V0的所有未被訪問過的鄰接點(diǎn),之后按這些頂點(diǎn)被訪問的先后次序依次訪問它們的鄰接點(diǎn),直至圖中所有和V0有路徑相通的頂點(diǎn)都被訪問到。,若此時(shí)圖中尚有頂點(diǎn)未被訪問,則另選圖中一個(gè)未曾被訪問的頂點(diǎn)作起始點(diǎn),重復(fù)上述過程,直至圖中所有頂點(diǎn)

15、都被訪問到為止。,第 33 頁(yè),7.3 圖的遍歷,圖的廣度遍歷(BFS) 從圖中某頂點(diǎn)v出發(fā): 1) 訪問頂點(diǎn)v 2) 訪問v的所有未被訪問的鄰接點(diǎn)w1,w2,wk 3) 依次從這些鄰接點(diǎn)出發(fā),訪問它們的所有未被訪問的鄰接點(diǎn),直到圖中所有訪問過的頂點(diǎn)的鄰接點(diǎn)都被訪問到。,V1,V2,V3,V4,V8,V5,V6,V7,V1,V3,V2,V6,V7,V4,V5,V8,第 34 頁(yè),7.3 圖的遍歷,void BFSTraverse ( Graph G, Status (*Visit) (int v) ) for ( v=0; vG.vexnum; +v ) visitedv = FALSE; / 初始化訪問標(biāo)志 InitQueue(Q); / 置空的輔助隊(duì)列Q for ( v=0; vG.vexnum; +v ) if ( !visitedv) / v 尚未訪問 /見下頁(yè) /if / BFSTraverse,第 35 頁(yè),7.3 圖的遍歷,/上頁(yè)中的 if 部分 visitedv = TRUE; Visit(v); / 訪問v EnQueue(Q, v); / v入隊(duì)列 while (!QueueEmpty(Q) DeQueue(Q, u); / 隊(duì)頭元素出隊(duì)并置為u f

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論