版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1第七章圖數(shù)據(jù)結(jié)構(gòu)與算法張路
2圖教學(xué)目的:是介紹圖的基本概念、兩種常用的存儲(chǔ)結(jié)構(gòu)、兩種遍歷算法以及圖的基本應(yīng)用。教學(xué)重點(diǎn):掌握在圖的兩種存儲(chǔ)結(jié)構(gòu)上實(shí)現(xiàn)的遍歷算法。教學(xué)難點(diǎn):圖的應(yīng)用算法,求最短路徑,求關(guān)鍵路徑以及拓?fù)渑判虻取?內(nèi)容提要圖的基本概念存儲(chǔ)表示圖的基本運(yùn)算與周游最小生成樹最短路徑拓?fù)渑判蜿P(guān)鍵路徑4圖的基本概念圖的定義:由頂點(diǎn)的有窮非空集合V和頂點(diǎn)的偶對(duì)(邊)集合E組成,記為G=(V,E),V是結(jié)點(diǎn)(頂點(diǎn))的有窮集合,E是邊的集合,是結(jié)點(diǎn)的偶對(duì)圖應(yīng)用廣泛:網(wǎng)絡(luò)布設(shè),航線管理,交通管理,語(yǔ)言學(xué)等。5有向圖定義:若圖中每條邊都是有方向的,則稱為有向圖。表示:有向圖中的邊是由兩個(gè)頂點(diǎn)組成的有序?qū)?,有序?qū)τ眉饫ㄌ?hào)表示如<vi,vj>表示一條有向邊,vi是邊的始點(diǎn),vj是邊的終點(diǎn)。<vi,vj>和<vj,vi>代表兩條不同的有向邊。邊<vi,vj>與頂點(diǎn)vi,vj相關(guān)聯(lián)V1V2V3V4有向圖6無(wú)向圖定義:若圖中每條邊都是無(wú)方向的,則稱為無(wú)向圖。表示:無(wú)向圖中的邊是由兩個(gè)頂點(diǎn)組成的無(wú)序?qū)?,無(wú)序?qū)τ脠A括號(hào)表示無(wú)向圖中(vi,vj)和(vj,vi)代表同一條邊。vi和vj是相鄰結(jié)點(diǎn),(vj,vi)是與頂點(diǎn)vj和vi相關(guān)聯(lián)的邊V1V2V4V5V3無(wú)向圖7例子G1為有向圖,其頂點(diǎn)集合和邊集合為:V(G1)={v0,v1,v2},E(G1)={<v0,v1>,<v1,v0>,<v1,v2>}G2和G3都是無(wú)向圖V(G2)={v0,v1,v2,v3}E(G2)={(v0,v1),(v0,v2),(v0,v3),(v1,v2),(v1,v3),(v2,v3)}
v0
v1
v2
(G1) (G2) (G3)8特殊的圖線性結(jié)構(gòu):唯一前驅(qū),唯一后繼,線性關(guān)系樹形結(jié)構(gòu):唯一前驅(qū),多個(gè)后繼,層次關(guān)系圖形結(jié)構(gòu):多對(duì)多、任意,網(wǎng)狀關(guān)系9假設(shè)條件下面的討論中,不考慮頂點(diǎn)到其自身的邊,即若(vi,vj)或<vi,vj>是E(G)中的邊,則vi≠vj圖中不允許一條邊重復(fù)出現(xiàn)10圖頂點(diǎn)與邊的關(guān)系圖G的頂點(diǎn)數(shù)n和邊數(shù)e滿足以下關(guān)系:若G是有向圖,則0≤e≤n(n-1)有向完全圖:有n(n-1)條邊的有向圖若G是無(wú)向圖,則0≤e≤n(n-1)/2無(wú)向完全圖:有n(n-1)/2條邊的無(wú)向圖在頂點(diǎn)個(gè)數(shù)相同的圖中,完全圖具有最多的邊數(shù)如圖G2就是一個(gè)具有4個(gè)頂點(diǎn)的無(wú)向完全圖,邊數(shù)為:4*(4-1)/2=6
v0
v1
v2
(G1) (G2) (G3)11度定義:與頂點(diǎn)v相關(guān)聯(lián)的邊數(shù)稱為頂點(diǎn)的度,記為D(v)在有向圖中,入度:若G是一個(gè)有向圖,則以頂點(diǎn)v為終點(diǎn)的邊的數(shù)目稱為v的入度,記為ID(v)出度:以v為始點(diǎn)的邊的數(shù)目稱為v的出度,記為OD(v)頂點(diǎn)v的度為其入度和出度之和,即D(v)=ID(v)+OD(v)12圖的頂點(diǎn)、邊數(shù)和度數(shù)之間的關(guān)系如G2中頂點(diǎn)v0的度為3如圖G1中頂點(diǎn)v1的入度為1,出度為2,度為3無(wú)論是有向圖還是無(wú)向圖,頂點(diǎn)數(shù)n,邊數(shù)e和度數(shù)之間滿足以下關(guān)系:有向圖(G1) (G2)
v0
v0
v1
v1
v2
v2
v3如:G2圖中,邊數(shù)為6,度數(shù)之和為(3+3+3+3)?==n1ii)/2D(veID(vi)=OD(vi)Σi=1nΣi=1n13子圖定義:設(shè)有圖G=(V,E)和G’=(V’,E’),如果V’是V的子集,E’是E的子集,則稱G’是G的子圖。如下圖給出了有向圖G1的若干子圖。(G1)
v0
v1
v214路徑定義:圖G=(V,E)中,若存在頂點(diǎn)序列vi0,vi1,…,vin,使得(vi0,vi1),(vi1,vi2),…,(vin-1,vin)都在E中(若G是有向圖,則使得<vi0,vi1>,<vi1,vi2>,…,<vin-1,vin>都在E中),則稱從頂點(diǎn)vi0到vin存在一條路徑路徑長(zhǎng)度:路徑上的邊數(shù)簡(jiǎn)單路徑:若路徑上的頂點(diǎn)除vi0和vin可以相同外,其它頂點(diǎn)都不相同回路或環(huán):起點(diǎn)和終點(diǎn)相同的簡(jiǎn)單路徑15例子如圖G1中頂點(diǎn)序列v0,v1,v0是一長(zhǎng)度為2的有向環(huán)G2中頂點(diǎn)序列v0,v1,v2,v3是一條從頂點(diǎn)v0到v3的長(zhǎng)度為3的路徑頂點(diǎn)序列v0,v1,v3,v0,v2是一條從頂點(diǎn)v0到v2的長(zhǎng)度為4的路徑,但不是簡(jiǎn)單路徑頂點(diǎn)序列v0,v1,v3,v0是一長(zhǎng)度為3的環(huán)16圖的根有向圖中,若存在一頂點(diǎn)v,從該頂點(diǎn)有路徑可以到圖中其它所有頂點(diǎn),則稱此有向圖為有根圖,v稱為圖的根顯然,有根圖中的根可能不唯一17無(wú)向圖的連通無(wú)向圖連通:無(wú)向圖G=(V,E)中,若從vi到vj有一條路徑(從vj到vi也一定有一條路徑),則稱vi和vj是連通的連通圖:若V(G)中任意兩個(gè)不同的頂點(diǎn)vi和vj都是連通的(即有路徑),則稱G為連通圖連通分量:無(wú)向圖G中的最大連通子圖(即任意增加G中結(jié)點(diǎn)或邊以后所得到的G的子圖都不再連通)稱為G的連通分量18例子如圖G2和G3都是連通圖H1和H2是G4的兩個(gè)連通分量G2G3G4V4V5V6V719有向圖的連通有向圖:強(qiáng)連通圖:有向圖G=(V,E)中,若V(G)中任意兩個(gè)不同的頂點(diǎn)vi和vj都存在從vi到vj以及從vj和vi的路徑,則稱圖G是強(qiáng)連通圖強(qiáng)連通分量:有向圖的最大強(qiáng)連通子圖稱為圖的強(qiáng)連通分量強(qiáng)連通圖只有一個(gè)強(qiáng)連通分量,就是其自身。非強(qiáng)連通的有向圖有多個(gè)強(qiáng)連通分量20例子如左圖G1是非強(qiáng)連通圖它的兩個(gè)強(qiáng)連通分量如右圖所示
v0
v2
v1
v0
v1
v221帶權(quán)圖、網(wǎng)絡(luò)若圖的每條邊都賦上一個(gè)權(quán),則稱為帶權(quán)圖帶權(quán)的連通圖稱為網(wǎng)絡(luò)。通常權(quán)是具有某種意義的數(shù)。下圖為一個(gè)網(wǎng)絡(luò)。22生成樹對(duì)于連通的無(wú)向圖或強(qiáng)連通的有向圖,從任一頂點(diǎn)出發(fā),或是對(duì)于有根的有向圖,從圖的根頂點(diǎn)出發(fā)周游,可以訪問(wèn)到所有的頂點(diǎn)。周游時(shí)經(jīng)過(guò)的邊加上所有頂點(diǎn)構(gòu)成了圖的一個(gè)連通子圖,稱為圖的一個(gè)生成樹。連通圖的生成樹是連通圖的一個(gè)極小連通子圖,它含有圖中的全部n個(gè)頂點(diǎn),但只有足以構(gòu)成一棵樹的n-1條邊。23生成樹(續(xù))如在一棵生成樹中增加一條邊,則必定構(gòu)成環(huán);如在一棵生成樹中去掉一條邊,則連通圖變?yōu)椴贿B通的;頂點(diǎn)數(shù)為n,邊數(shù)小于n-1的無(wú)向圖必定是不連通的;頂點(diǎn)數(shù)為n,邊數(shù)大于n-1的無(wú)向圖必定存在環(huán);頂點(diǎn)數(shù)為n,邊數(shù)為n-1的無(wú)向圖不一定是生成樹。24內(nèi)容提要圖的基本概念存儲(chǔ)表示圖的基本運(yùn)算與周游最小生成樹最短路徑拓?fù)渑判蜿P(guān)鍵路徑25圖的存儲(chǔ)圖的結(jié)構(gòu)較復(fù)雜,任意兩個(gè)頂點(diǎn)間都可能存在聯(lián)系,因而圖的存儲(chǔ)方法也很多,應(yīng)根據(jù)具體的應(yīng)用和施加的操作選擇圖的存儲(chǔ)表示法鄰接矩陣表示法鄰接表表示法26鄰接矩陣表示法1鄰接矩陣是表示頂點(diǎn)間相鄰關(guān)系的矩陣:頂點(diǎn)信息關(guān)系信息:對(duì)稱的n階方陣設(shè)G=(V,E)為具有n個(gè)頂點(diǎn)的圖,其鄰接矩陣為具有以下性質(zhì)的n階方陣?íì><><=的邊不是圖或若的邊是圖或若GvvvvGvvvvjiAjijijiji,),(,0,),(,1],[27例子無(wú)向圖G5和有向圖G6的鄰接矩陣分別為A1和A228鄰接矩陣表示法2如果G是帶權(quán)的圖,wij是邊(vi,vj)或<vi,vj>的權(quán),則其鄰接矩陣定義為∶?íì><¥><=的邊不是圖或若或的邊是圖或若GvvvvGvvvvwjiAjijijijiij,),(,0,),(,],[úúúúúú?ùêêêêêê?é=010011010024802065114603085303Aúúúúúú?ùêêêêêê?饥¥¥¥¥¥¥¥=101110248265114638534A29圖的鄰接矩陣存儲(chǔ)結(jié)構(gòu)#defineMAXVEX常數(shù)1 #defineMAXEDGE常數(shù)2typedefcharVexType;typedeffloatAdjType;typedefstruct{
VexTypevexs[MAXVEX]; /*頂點(diǎn)信息*/ AdjTypearcs[MAXVEX][MAXVEX];/*鄰接矩陣*/ intn; /*圖的頂點(diǎn)個(gè)數(shù)*/}Graph;30鄰接矩陣的特點(diǎn)無(wú)向圖無(wú)向圖的鄰接矩陣一定是一個(gè)對(duì)稱方陣。無(wú)向圖的鄰接矩陣的第i行(或第i列)非零元素(或非∞元素)個(gè)數(shù)為第i個(gè)頂點(diǎn)的度D(vi)。有向圖有向圖的鄰接矩陣的第i行非零元素(或非∞元素)個(gè)數(shù)為第i個(gè)頂點(diǎn)的出度OD(vi),第i列非零元素(或非∞元素)個(gè)數(shù)就是第i個(gè)頂點(diǎn)的入度ID(vi)。鄰接矩陣表示圖,很容易確定圖中任意兩個(gè)頂點(diǎn)之間是否有邊相連。31鄰接矩陣的特點(diǎn)鄰接矩陣的存儲(chǔ)代價(jià)需要存儲(chǔ)一個(gè)包括n結(jié)點(diǎn)的順序表來(lái)保存結(jié)點(diǎn)的數(shù)據(jù)或指向結(jié)點(diǎn)的數(shù)據(jù)指針需存儲(chǔ)一個(gè)n*n的相鄰矩陣來(lái)指示結(jié)點(diǎn)間的關(guān)系有向圖:需n*n個(gè)單元來(lái)存儲(chǔ)相鄰矩陣O(n2)無(wú)向圖:由于相鄰矩陣是對(duì)稱的只需存儲(chǔ)相鄰矩陣的下三角部分32鄰接矩陣的特點(diǎn)求解度數(shù)有向圖:矩陣第i行元素值的和是第i個(gè)結(jié)點(diǎn)的出度,第i列元素值的和是第i個(gè)結(jié)點(diǎn)的入度無(wú)向圖:鄰接矩陣第i行(或第i列)元素值的和就是第i個(gè)結(jié)點(diǎn)的度數(shù)鄰接矩陣表示法的優(yōu)缺點(diǎn)優(yōu)點(diǎn):各種基本操作都易于實(shí)現(xiàn)。缺點(diǎn):空間浪費(fèi)嚴(yán)重。某些算法時(shí)間效率低。33圖的存儲(chǔ)圖的結(jié)構(gòu)較復(fù)雜,任意兩個(gè)頂點(diǎn)間都可能存在聯(lián)系,因而圖的存儲(chǔ)方法也很多,應(yīng)根據(jù)具體的應(yīng)用和施加的操作選擇圖的存儲(chǔ)表示法鄰接矩陣表示法鄰接表表示法34鄰接表表示法由順序存儲(chǔ)的頂點(diǎn)表+n個(gè)鏈?zhǔn)酱鎯?chǔ)的邊表順序存儲(chǔ)的頂點(diǎn)表頂點(diǎn)表存放頂點(diǎn)本身的數(shù)據(jù)信息表中每個(gè)表目對(duì)應(yīng)于圖的一個(gè)頂點(diǎn),包括兩個(gè)字段頂點(diǎn)字段(vertex)存放頂點(diǎn)vi的信息指針字段(edgeList)存放與vi相關(guān)聯(lián)的邊表中的第一個(gè)邊結(jié)點(diǎn)的地址vertexedgeList35鄰接表表示法(續(xù))n個(gè)鏈?zhǔn)酱鎯?chǔ)的邊表邊表中每個(gè)邊結(jié)點(diǎn)包括三個(gè)字段:相鄰頂點(diǎn)字段(endvex)存放通過(guò)本邊與頂點(diǎn)vi相鄰接的頂點(diǎn)vj在頂點(diǎn)表中的位置j權(quán)字段(weight)存放邊結(jié)點(diǎn)所代表的邊的權(quán)值鏈字段(nextedge)指向邊表的下一個(gè)邊結(jié)點(diǎn)endvexnextedgeweight36無(wú)向圖的表示每條邊(vi,vj)在兩個(gè)頂點(diǎn)vi,vj的邊表中都占一個(gè)結(jié)點(diǎn),因此,每條邊在邊表中存儲(chǔ)兩次。頂點(diǎn)vi的邊表中結(jié)點(diǎn)個(gè)數(shù)為頂點(diǎn)vi的度無(wú)向圖G1的鄰接表
v2v1v0v3省略權(quán)值37有向圖的表示頂點(diǎn)vi的邊表中每個(gè)結(jié)點(diǎn)對(duì)應(yīng)的是以vi為始點(diǎn)的一條邊,因此,將有向圖鄰接表的邊表稱為出邊表。頂點(diǎn)vi的邊表中結(jié)點(diǎn)個(gè)數(shù)為頂點(diǎn)vi的出度也可將表表示示為入邊表38有向圖G2的鄰接表(出邊表)有向圖G2的逆鄰接表(入邊表)
有向圖G2v0v2v4v1v339鄰接表表示法的存儲(chǔ)結(jié)構(gòu)structEdgeNode;typedefstructEdgeNode*PEdgeNode;typedefstructEdgeNode*EdgeList;structEdgeNode{ intendvex; /*相鄰頂點(diǎn)字段*/ AdjTypeweight; /*邊的權(quán)*/ PEdgeNodenextedge; /*鏈字段*/}; /*邊表中的結(jié)點(diǎn)*/typedefstruct{ VexTypevertex; /*頂點(diǎn)信息*/ EdgeListedgelist; /*邊表頭指針*/}VexNode;/*頂點(diǎn)表中的結(jié)點(diǎn)*/typedefstruct{ VexNodevexs[MAXVEX]; intn; /*圖的頂點(diǎn)個(gè)數(shù)*/}GraphList;40鄰接表的存儲(chǔ)代價(jià)若圖G是無(wú)向圖,則圖的鄰接表表示的空間代價(jià)為O(n+2e)
若圖G是有向圖,則圖的鄰接表表示的空間代價(jià)為O(n+e)41一些基本操作的實(shí)現(xiàn)求無(wú)向圖中某個(gè)頂點(diǎn)的度: 為該結(jié)點(diǎn)所指向的鏈表中的結(jié)點(diǎn)總數(shù)求有向圖的出度: 該結(jié)點(diǎn)所指向的鏈表的結(jié)點(diǎn)總數(shù)求有向圖的入度:必須搜索整個(gè)鄰接表才能得到改進(jìn):增加逆鄰接表42鄰接表的優(yōu)缺點(diǎn)優(yōu)點(diǎn)容易找任一結(jié)點(diǎn)的第一鄰接點(diǎn)和下一個(gè)鄰接點(diǎn);存儲(chǔ)量小。缺點(diǎn):判定任意兩個(gè)結(jié)點(diǎn)之間是否有邊或弧不方便(需要掃描頂點(diǎn)邊表)。43如何選擇合適的存儲(chǔ)方法?鄰接矩陣表示的空間代價(jià)只與圖的頂點(diǎn)數(shù)有關(guān),若圖中邊的數(shù)目小于頂點(diǎn)的數(shù)目,則用鄰接表表示圖比較節(jié)省空間如果e達(dá)到n2數(shù)量級(jí)時(shí),由于鄰接表中增加了輔助的鏈域,采用鄰接矩陣表示圖更節(jié)省空間。特別對(duì)于無(wú)權(quán)圖而言,鄰接矩陣的每個(gè)元素只要一個(gè)位就可以表示44內(nèi)容提要圖的基本概念存儲(chǔ)表示圖的基本運(yùn)算與周游最小生成樹最短路徑拓?fù)渑判蜿P(guān)鍵路徑45圖的基本運(yùn)算定義圖的基本類型為Graph,圖的頂點(diǎn)類型為Vertex,頂點(diǎn)信息的類型為VexType,圖中邊的類型為Edge圖中的基本運(yùn)算可以定義如下:創(chuàng)建一個(gè)空?qǐng)D
GraphcreatGraph()判斷圖g是否是空?qǐng)DintisNullGraph(Graphg)把圖g置為空?qǐng)DvoidmakeNullGraph(Graphg)銷毀一個(gè)圖g,即釋放圖g占用的空間voiddestroyGraph(Graphg)查找圖中值為value的頂點(diǎn)
VertexsearchVertex(Graphg,VexTypevalue)46圖的基本運(yùn)算在圖g中增加一個(gè)值為value的頂點(diǎn)GraphaddVertex(Graphg,VexTypevalue)在圖g中刪除一個(gè)頂點(diǎn)和與該頂點(diǎn)相關(guān)聯(lián)的所有邊GraphdeleteVertex(Graphg,Vertexvi)在圖g中刪除/增加一條邊<vi,vj>
GraphdeleteEdge/addEdge(Graphg,Vertexvi,Vertexvj)判斷圖g中是否存在一條指定邊<vi,vj>
intfindEdge(Graphg,Vertexvi,Vertexvj)……
由于不同的應(yīng)用要求,實(shí)現(xiàn)的操作有很大差別47圖的周游圖的周游從圖中某一頂點(diǎn)出發(fā),按照某種方式系統(tǒng)地訪問(wèn)圖中所有頂點(diǎn),且使每一個(gè)結(jié)點(diǎn)被訪問(wèn)且僅被訪問(wèn)一次。也稱為圖的遍歷。連通圖或強(qiáng)連通圖:從圖中任意一頂點(diǎn)出發(fā)都可以訪問(wèn)圖中所有頂點(diǎn)由于圖中每個(gè)頂點(diǎn)都可能與圖中其它多個(gè)頂點(diǎn)鄰接并存在回路,為了避免重復(fù)訪問(wèn)已訪問(wèn)過(guò)的頂點(diǎn),在圖的周游中,通常對(duì)已訪問(wèn)過(guò)的頂點(diǎn)作標(biāo)記。48圖的周游方法深度優(yōu)先周游(Depth_FirstSearch/Traversal,DFS)廣度優(yōu)先周游(Breadth_FirstSearch/Traversal,BFS)49深度優(yōu)先周游具體的思想:從圖的指定頂點(diǎn)v出發(fā),先訪問(wèn)頂點(diǎn)v,并將其標(biāo)記為已訪問(wèn)過(guò)然后依次從v未被訪問(wèn)過(guò)的鄰接頂點(diǎn)w出發(fā)進(jìn)行深度優(yōu)先搜索,直到圖中與v相連的所有頂點(diǎn)都被訪問(wèn)過(guò)如果圖中還有未被訪問(wèn)的頂點(diǎn),則從另一未被訪問(wèn)過(guò)的頂點(diǎn)出發(fā)重復(fù)上述過(guò)程,直到圖中所有頂點(diǎn)都被訪問(wèn)過(guò)為止50深度優(yōu)先搜索序列對(duì)圖進(jìn)行深度優(yōu)先周游時(shí),按訪問(wèn)頂點(diǎn)的先后次序所得到的頂點(diǎn)序列,稱為該圖的深度優(yōu)先搜索序列,簡(jiǎn)稱DFS序列V1出發(fā)深度優(yōu)先搜索序列:V1->V2->V4->V8->V5->V3->V6->V7訪問(wèn)過(guò)的結(jié)點(diǎn)需要特殊標(biāo)志,避免回路。V1V2V3V4V5V8V6V751V7V6V3V2V5V1V8V4V7V6V3V2V5V1V8V4841532721例子_1:V1
v2
v4
v8
v5
v3
v6
v7周游時(shí)的訪問(wèn)路徑周游時(shí)的回溯路徑周游時(shí)已訪問(wèn)過(guò)的鄰接點(diǎn)52例子_3:已知無(wú)向圖及其鄰接表,求DFS序列53voiddFSInList(GraphList*pgraphlist,intvisited[],inti){intj;PEdgeNodep;printf(“node:%c\n”,pgraphlist->vexs[i].vertex);visited[i]=TRUE;p=pgraphlist->vexs[i].edgelist;/*取邊表中的第一個(gè)邊結(jié)點(diǎn)*/while(p!=NULL){if(visited[p->endvex]==FALSE)/*未被訪問(wèn)*/dFSInList(pgraphlist,visited,p->endvex);p=p->nextedge; /*取邊表中的下一個(gè)邊結(jié)點(diǎn)*/}}/*從vi出發(fā)進(jìn)行深度優(yōu)先搜索,圖采用鄰接表存儲(chǔ)*/54traverDFS(GraphList*pgraphlist);{intvisited[MAXVEX]; intn; n=pgraphlist->n; for(i=0;i<n;i++) visited[i]=FALSE;/*初始化數(shù)組visited*/ for(i=0;i<n;i++) if(visited[i]==FALSE) dFSInList(pgraphlist,visited,i);
}說(shuō)明:設(shè)圖有n個(gè)頂點(diǎn),e條邊,若圖是連通圖,則只需調(diào)用dFSInList一次,就可完成圖的深度優(yōu)先周游;否則調(diào)用幾次則表明圖中有幾個(gè)連通分量圖的深度優(yōu)先周游55例子_4:已知無(wú)向圖的鄰接矩陣,求DFS序列初始化,首先設(shè)置一個(gè)數(shù)組visited(大小n=8,為圖中頂點(diǎn)個(gè)數(shù)),各元素的初值為FALSE,表示所有頂點(diǎn)均未訪問(wèn)過(guò)。56/*從vi出發(fā)進(jìn)行深度優(yōu)先搜索,圖采用鄰接矩陣表示法*/voiddFSInMatrix(Graph*pGraph,intvisited[],inti){int
j;printf(“node:%c\n”,pGraph->vexs[i]);/*訪問(wèn)出發(fā)點(diǎn)vi*/visited[i]=TRUE;for(j=0;j<pGraph->n;j++)if((pGraph->arcs[i][j]==1)&&(visited[j]==FALSE))dFSInMatrix(pGraph,visited,j);}57voidtraverDFS(Graph*pGraph){intvisited[MAXVEX];/*初始化數(shù)組visited*/
for(i=0;i<pGraph->n;i++)visited[i]=FALSE;for(i=0;i<n;i++)if(visited[i]==FALSE)dFSInMatrix(pGraph,visited,i);/*if(visited[i]==FALSE)dFSInList(pGraph,visited,i);調(diào)用多少次,表示圖中有多少個(gè)連通分量*/}圖的深度優(yōu)先周游58DFS算法分析時(shí)間復(fù)雜度:采用鄰接矩陣表示-O(n2),得到一個(gè)頂點(diǎn)的所有鄰接點(diǎn)需要檢查矩陣相應(yīng)行中的n個(gè)元素采用鄰接表表示-O(n+e),檢查一
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025云南昆明市呈貢區(qū)城市投資集團(tuán)有限公司及下屬子公司第二批員工崗招聘11人備考筆試試題及答案解析
- 2025重慶酉陽(yáng)自治縣城區(qū)事業(yè)單位公開遴選34人模擬筆試試題及答案解析
- 2025浙江溫州甌海區(qū)第二人民醫(yī)院(仙巖)面向社會(huì)招聘執(zhí)業(yè)醫(yī)師、護(hù)士參考筆試題庫(kù)附答案解析
- 2025年福建省人資集團(tuán)漳州地區(qū)招聘2人參考考試試題及答案解析
- 2025湖南省演出公司招聘2人模擬筆試試題及答案解析
- 深度解析(2026)GBT 26342-2024深度解析(2026)《國(guó)際間遺體轉(zhuǎn)運(yùn) 棺柩》
- 深度解析(2026)《GBT 26049-2010銀包銅粉》(2026年)深度解析
- 2025中國(guó)農(nóng)業(yè)大學(xué)水利與土木工程學(xué)院科研助理招聘1人備考筆試題庫(kù)及答案解析
- 2025河南城發(fā)水務(wù)(長(zhǎng)垣市)有限公司招聘6人考試筆試模擬試題及答案解析
- 2025廣東中山市板芙鎮(zhèn)招聘公辦中小學(xué)校臨聘教師1人模擬筆試試題及答案解析
- 短暫性腦缺血發(fā)作診療指南診療規(guī)范
- 髖關(guān)節(jié)撞擊綜合征診療課件
- 五子棋社團(tuán)活動(dòng)方案及五子棋社團(tuán)活動(dòng)教案
- 核對(duì)稿600單元概述校核
- 個(gè)人獨(dú)資企業(yè)公司章程(商貿(mào)公司)
- GA/T 1073-2013生物樣品血液、尿液中乙醇、甲醇、正丙醇、乙醛、丙酮、異丙醇和正丁醇的頂空-氣相色譜檢驗(yàn)方法
- A建筑公司發(fā)展戰(zhàn)略研究,mba戰(zhàn)略管理論文
- 中國(guó)汽車工業(yè)協(xié)會(huì)-軟件定義汽車:產(chǎn)業(yè)生態(tài)創(chuàng)新白皮書v1.0-103正式版
- 情報(bào)學(xué)-全套課件(上)
- 公司戰(zhàn)略規(guī)劃和落地方法之:五看三定工具解析課件
評(píng)論
0/150
提交評(píng)論