數(shù)據(jù)結(jié)構(gòu)答案第6章._第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)答案第6章._第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)答案第6章._第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)答案第6章._第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)答案第6章._第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第6章圖2005-07-14第6章圖課后習(xí)題講解1.填空題設(shè)無向圖G中頂點(diǎn)數(shù)為n,則圖G至少有()條邊,至多有()條邊;若G為有向圖,則至少有() 條邊,至多有()條邊?!窘獯稹?,n(n-1)/2,0,n(n-1)【分析】圖的頂點(diǎn)集合是有窮非空的,而邊集可以是空集;邊數(shù)達(dá)到最多的圖稱為完全圖,在完全圖中, 任意兩個(gè)頂點(diǎn)之間都存在邊。任何連通圖的連通分量只有一個(gè),即是()?!窘獯稹科渥陨韴D的存儲(chǔ)結(jié)構(gòu)主要有兩種,分別是( )和()?!窘獯稹苦徑泳仃?,鄰接表【分析】這是最常用的兩種存儲(chǔ)結(jié)構(gòu),此外,還有十字鏈表、鄰接多重表、邊集數(shù)組等。已知無向圖G的頂點(diǎn)數(shù)為n,邊數(shù)為e,其鄰接表表示的空間復(fù)雜度為(

2、)?!窘獯稹縊 (n+e)【分析】在無向圖的鄰接表中,頂點(diǎn)表有n個(gè)結(jié)點(diǎn),邊表有2e個(gè)結(jié)點(diǎn),共有n+2e個(gè)結(jié)點(diǎn),其空間復(fù)雜度為O (n+2e)= O (n+e)。已知一個(gè)有向圖的鄰接矩陣表示,計(jì)算第 j個(gè)頂點(diǎn)的入度的方法是()。【解答】求第j列的所有元素之和有向圖G用鄰接矩陣Ann存儲(chǔ),其第i行的所有元素之和等于頂點(diǎn)i的()。【解答】出度 圖的深度優(yōu)先遍歷類似于樹的()遍歷,它所用到的數(shù)據(jù)結(jié)構(gòu)是();圖的廣度優(yōu)先遍歷類似于樹的()遍歷,它所用到的數(shù)據(jù)結(jié)構(gòu)是()?!窘獯稹壳靶?,棧,層序,隊(duì)列對(duì)于含有n個(gè)頂點(diǎn)e條邊的連通圖,利用 Prim算法求最小生成樹的時(shí)間復(fù)雜度為(),利用Kruskal算法求最

3、小生成樹的時(shí)間復(fù)雜度為()?!窘獯稹縊 (n2),O (elog2e)【分析】Prim算法采用鄰接矩陣做存儲(chǔ)結(jié)構(gòu),適合于求稠密圖的最小生成樹;Kruskal算法采用邊集數(shù)組做存儲(chǔ)結(jié)構(gòu),適合于求稀疏圖的最小生成樹。 如果一個(gè)有向圖不存在(),則該圖的全部頂點(diǎn)可以排列成一個(gè)拓?fù)湫蛄??!窘獯稹炕芈吩谝粋€(gè)有向圖中,若存在弧、,則在其拓?fù)湫蛄兄?,頂點(diǎn)vi, vj, vk的相對(duì)次序?yàn)椋ǎ!窘獯稹縱i, vj, vk【分析】對(duì)由頂點(diǎn)vi, vj, vk組成的圖進(jìn)行拓?fù)渑判颉?.選擇題在一個(gè)無向圖中,所有頂點(diǎn)的度數(shù)之和等于所有邊數(shù)的()倍。A 1/2 B 1 C 2 D 4【解答】CS D(齊)土 2$【分

4、析】設(shè)無向圖中含有 n個(gè)頂點(diǎn)e條邊U上-。n個(gè)頂點(diǎn)的強(qiáng)連通圖至少有()條邊,其形狀是()。A n B n+1 C n-1 D n(n-1)E無回路F有回路 G環(huán)狀H樹狀【解答】A,G 含n個(gè)頂點(diǎn)的連通圖中的任意一條簡(jiǎn)單路徑,其長(zhǎng)度不可能超過()。A 1 B n/2 C n-1 D n【解答】C【分析】若超過n-1,則路徑中必存在重復(fù)的頂點(diǎn)。對(duì)于一個(gè)具有n個(gè)頂點(diǎn)的無向圖,若采用鄰接矩陣存儲(chǔ),則該矩陣的大小是()。A n B (n-1)2 C n-1 D n2【解答】D圖的生成樹(),n個(gè)頂點(diǎn)的生成樹有()條邊。A唯一B不唯一C唯一性不能確定D n E n +1 F n-1【解答】C,F(xiàn) 設(shè)無向圖

5、G=(V, E)和G' =(V', E'),如果G'是G的生成樹,則下面的說法中錯(cuò)誤的是()。A G'為G的子圖B G'為G的連通分量C G'為G的極小連通子圖且 V = V D G'是G的一個(gè)無環(huán)子圖【解答】B【分析】連通分量是無向圖的極大連通子圖,其中極大的含義是將依附于連通分量中頂點(diǎn)的所有邊都加上,所以,連通分量中可能存在回路。G是一個(gè)非連通無向圖,共有28條邊,則該圖至少有()個(gè)頂點(diǎn)。A 6 B 7 C 8 D 9【解答】D【分析】n個(gè)頂點(diǎn)的無向圖中,邊數(shù) eWn(n-1)/2,將e=28代入,有n8,現(xiàn)已知無向圖非連通,

6、則n=9 最小生成樹指的是( ) 。A 由連通網(wǎng)所得到的邊數(shù)最少的生成樹B 由連通網(wǎng)所得到的頂點(diǎn)數(shù)相對(duì)較少的生成樹C 連通網(wǎng)中所有生成樹中權(quán)值之和為最小的生成樹D 連通網(wǎng)的極小連通子圖【解答】 C 判定一個(gè)有向圖是否存在回路除了可以利用拓?fù)渑判蚍椒ㄍ猓€可以用()。A 求關(guān)鍵路徑的方法B 求最短路徑的方法C 廣度優(yōu)先遍歷算法D 深度優(yōu)先遍歷算法【解答】 D【分析】當(dāng)有向圖中無回路時(shí),從某頂點(diǎn)出發(fā)進(jìn)行深度優(yōu)先遍歷時(shí),出棧的順序(退出DFSTraverse 算法)即為逆向的拓?fù)湫蛄小?下面關(guān)于工程計(jì)劃的 AOE 網(wǎng)的敘述中,不正確的是( )?br /> A 關(guān)鍵活動(dòng)不按期完成就會(huì)影響整個(gè)工

7、程的完成時(shí)間B 任何一個(gè)關(guān)鍵活動(dòng)提前完成,那么整個(gè)工程將會(huì)提前完成C 所有的關(guān)鍵活動(dòng)都提前完成,那么整個(gè)工程將會(huì)提前完成D 某些關(guān)鍵活動(dòng)若提前完成,那么整個(gè)工程將會(huì)提前完【解答】 B【分析】AOE網(wǎng)中的關(guān)鍵路徑可能不止一條,如果某一個(gè)關(guān)鍵活動(dòng)提前完成,還不能提前整個(gè)工程,而必 須同時(shí)提高在幾條關(guān)鍵路徑上的關(guān)鍵活動(dòng)。3. 判斷題 一個(gè)有向圖的鄰接表和逆鄰接表中的結(jié)點(diǎn)個(gè)數(shù)一定相等?!窘獯稹繉?duì)。鄰接表和逆鄰接表的區(qū)別僅在于出邊和入邊,邊表中的結(jié)點(diǎn)個(gè)數(shù)都等于有向圖中邊的個(gè)數(shù)。 用鄰接矩陣存儲(chǔ)圖,所占用的存儲(chǔ)空間大小只與圖中頂點(diǎn)個(gè)數(shù)有關(guān),而與圖的邊數(shù)無關(guān)。【解答】對(duì)。鄰接矩陣的空間復(fù)雜度為O(n2),與

8、邊的個(gè)數(shù)無關(guān)。 圖 G 的生成樹是該圖的一個(gè)極小連通子圖【解答】錯(cuò)。必須包含全部頂點(diǎn)。 無向圖的鄰接矩陣一定是對(duì)稱的,有向圖的鄰接矩陣一定是不對(duì)稱的 【解答】錯(cuò)。有向圖的鄰接矩陣不一定對(duì)稱,例如有向完全圖的鄰接矩陣就是對(duì)稱的。 對(duì)任意一個(gè)圖,從某頂點(diǎn)出發(fā)進(jìn)行一次深度優(yōu)先或廣度優(yōu)先遍歷,可訪問圖的所有頂點(diǎn)。【解答】錯(cuò)。只有連通圖從某頂點(diǎn)出發(fā)進(jìn)行一次遍歷,可訪問圖的所有頂點(diǎn)。 在一個(gè)有向圖的拓?fù)湫蛄兄校繇旤c(diǎn)a在頂點(diǎn)b之前,則圖中必有一條弧?!窘獯稹垮e(cuò)。只能說明從頂點(diǎn) a 到頂點(diǎn) b 有一條路徑。 若一個(gè)有向圖的鄰接矩陣中對(duì)角線以下元素均為零,則該圖的拓?fù)湫蛄斜囟ù嬖??!窘獯稹繉?duì)。參見第11題的證

9、明。 在AOE網(wǎng)中一定只有一條關(guān)鍵路徑 ?br/【解答】錯(cuò)。AOE網(wǎng)中可能有不止一條關(guān)鍵路徑,他們的路 徑長(zhǎng)度相同。4. n個(gè)頂點(diǎn)的無向圖,采用鄰接表存儲(chǔ),回答下列問題 ?br/圖中有多少條邊? 任意兩個(gè)頂點(diǎn)i和j是否有邊相連?任意一個(gè)頂點(diǎn)的度是多少?br/【解答】 邊表中的結(jié)點(diǎn)個(gè)數(shù)之和除以 2。 第i個(gè)邊表中是否含有結(jié)點(diǎn) jo 該頂點(diǎn)所對(duì)應(yīng)的邊表中所含結(jié)點(diǎn)個(gè)數(shù)。5. n個(gè)頂點(diǎn)的無向圖,采用鄰接矩陣存儲(chǔ),回答下列問題:圖中有多少條邊? 任意兩個(gè)頂點(diǎn)i和j是否有邊相連?任意一個(gè)頂點(diǎn)的度是多少?【解答】鄰接矩陣中非零元素個(gè)數(shù)的總和除以2o 當(dāng)鄰接矩陣A中Aij=1 (或Aji=1 )時(shí),表示兩頂點(diǎn)

10、之間有邊相連。計(jì)算鄰接矩陣上該頂點(diǎn)對(duì)應(yīng)的行上非零元素的個(gè)數(shù)。6 證明:生成樹中最長(zhǎng)路徑的起點(diǎn)和終點(diǎn)的度均為1?!窘獯稹坑梅醋C法證明。設(shè)v1, v2, -, vl是生成樹的一條最長(zhǎng)路徑,其中, v1為起點(diǎn),vk為終點(diǎn)。若vk的度為2,取vk的另一個(gè) 鄰接點(diǎn)v,由于生成樹中無回路,所以,v在最長(zhǎng)路徑上,顯然 v1, v2,vk , v的路徑最長(zhǎng),與假設(shè)矛盾。所以生成樹中最長(zhǎng)路徑的終點(diǎn)的度為1 o同理可證起點(diǎn)vl的度不能大于1,只能為1o7已知一個(gè)連通圖如圖 6-6所示,試給出圖的鄰接矩陣和鄰接表存儲(chǔ)示意圖,若從頂點(diǎn)v1出發(fā)對(duì)該圖進(jìn)行遍歷,分別給岀一個(gè)按深度優(yōu)先遍歷和廣度優(yōu)先遍歷的頂點(diǎn)序列?!窘獯稹?/p>

11、鄰接矩陣表示如下:F%01C10i10111001001011001101110010C10D_深度優(yōu)先遍歷序列為:v1 v2 v3 v5 v4 v6廣度優(yōu)先遍歷序列為:v1 v2 v4 v6 v3 v5鄰接表表示如下:123456Kruskal算法求最小生成樹?!窘獯稹堪碢rim算法求最小生成樹的過程如下:(D8 .圖6-7所示是一個(gè)無向帶權(quán)圖,請(qǐng)分別按Prim算法和按Kruskal算法求最小生成樹的過程如下:(D0tn(3)(E)9 .對(duì)于圖6-8所示的帶權(quán)有向圖,求從源點(diǎn)v1到其他各頂點(diǎn)的最短路徑。15P210711910【解答】從源點(diǎn)v1到其他各頂點(diǎn)的最短路徑如下表所示。源點(diǎn) 終點(diǎn) 最

12、短路徑 最短路徑長(zhǎng)度v1 v7 v1 v7 7v1 v5 v1 v5 11v1 v4 v1 v7 v4 13 v1 v6 v1 v7 v4 v6 16v1 v2 v1 v7 v2 22v1 v3 v1 v7 v4 v6 v3 2510如圖6-9所示的有向網(wǎng)圖,利用 Dijkstra算法求從頂點(diǎn)v1到其他各頂點(diǎn)的最短路徑。16-9第10題閨【解答】從源點(diǎn)v1到其他各頂點(diǎn)的最短路徑如下表所示。源點(diǎn)終點(diǎn)最短路徑最短路徑長(zhǎng)度v1 v3 v1 v3 15v1 v5 v1 v5 15v1 v2 v1 v3 v2 25v1 v6 v1 v3 v2 v6 40v1 v4 v1 v3 v2 v4 4511 證明

13、:只要適當(dāng)?shù)嘏帕许旤c(diǎn)的次序,就能使有向無環(huán)圖的鄰接矩陣中主對(duì)角線以下的元素全部為0?!窘獯稹咳我鈔個(gè)結(jié)點(diǎn)的有向無環(huán)圖都可以得到一個(gè)拓?fù)湫蛄小TO(shè)拓?fù)湫蛄袨関0v1v2vn -1,我們來證明此時(shí)的鄰接矩陣A為上三角矩陣。證明采用反證法。假設(shè)此時(shí)的鄰接矩陣不是上三角矩陣,那么,存在下標(biāo)i和j (i>j),使得Aij不等于零,即圖中存在從vi到vj的一條有向邊。由拓?fù)湫蛄械亩x可知,在任意拓?fù)湫蛄兄?,vi的位置一定在vj之前,而在上述拓?fù)湫蛄衯0v1v2vn -1中,由于i>j,即vi的位置在vj之后,導(dǎo)致矛盾。因此命題正確。12.算法設(shè)計(jì) 設(shè)計(jì)算法,將一個(gè)無向圖的鄰接矩陣轉(zhuǎn)換為鄰接表。【

14、解答】先設(shè)置一個(gè)空的鄰接表,然后在鄰接矩陣上查找值不為零的元素,找到后在鄰接表的對(duì)應(yīng)單鏈表 中插入相應(yīng)的邊表結(jié)點(diǎn)。鄰接矩陣存儲(chǔ)結(jié)構(gòu)定義如下:const int MaxSize=10;templatestruct AdjMatrixT vertexMaxSize; / 存放圖中頂點(diǎn)的數(shù)組int arcMaxSizeMaxSize; /存放圖中邊的數(shù)組int vertexNum, arcNum; /圖的頂點(diǎn)數(shù)和邊數(shù);鄰接表存儲(chǔ)結(jié)構(gòu)定義如下:const int MaxSize=10;struct ArcNode / 定義邊表結(jié)點(diǎn)int adjvex; /鄰接點(diǎn)域ArcNode *next;;temp

15、latestruct VertexNode / 定義頂點(diǎn)表結(jié)點(diǎn)T vertex;ArcNode *firstedge;struct AdjListVertexNode adjlistMaxSize;int vertexNum, arcNum; /圖的頂點(diǎn)數(shù)和邊數(shù);具體算法如下:鄰整縫陣拮為鄰接表舞法MatToL4 void MatToList(AdjMatriz &A, AdjList &B) (B .vertezbluni= A. vertexNum, B.arcNum=A.arcbIuniP for (i-0; KA vertezNum; i+)B adjlistfi fi

16、rstedg=NULL;for (i=0, i<A. vertexNum, i+ ) for (j=0; j<i; j+)if (A.arcijp-0)( p=n酥 ArcNode; p->adj7EJ?=jt p- >next=B. adj listfi. firstedge; B.adjlis ti. firstedge=p T) 設(shè)計(jì)算法,將一個(gè)無向圖的鄰接表轉(zhuǎn)換成鄰接矩陣。1。鄰接矩陣和鄰接表【解答】在鄰接表上順序地取每個(gè)邊表中的結(jié)點(diǎn),將鄰接矩陣中對(duì)應(yīng)單元的值置為的存儲(chǔ)結(jié)構(gòu)定義與上題相同。具體算法如下:鄰接表轉(zhuǎn)為鄰接矩陣算法ListToMat void List

17、ToMat (AdjMatrix &A, AdjList &B) (A. 7ertcKNum=B. v ert 閔Num*A. arcNum=B. arcNum, for (1=0; i<A vatexblum; i+ for (j=Q, j <A. verleKNum, j+)far i<A.vertesNum; i+)(p=B alistfi. firstedge, while (p)j= p->avex;p=p->nesl, 設(shè)計(jì)算法,計(jì)算圖中岀度為零的頂點(diǎn)個(gè)數(shù)?!窘獯稹吭谟邢驁D的鄰接矩陣中,一行對(duì)應(yīng)一個(gè)頂點(diǎn),每行的非零元素的個(gè)數(shù)等于對(duì)應(yīng)頂點(diǎn)

18、的岀度。因此, 當(dāng)某行非零元素的個(gè)數(shù)為零時(shí),則對(duì)應(yīng)頂點(diǎn)的岀度為零。據(jù)此,從第一行開始,查找每行的非零元素個(gè)數(shù) 是否為零,若是則計(jì)數(shù)器加 1。具體算法如下:疑計(jì)出度為0的算法SumZeromt SuniZero (Adj Matr ix A) coun±=0, for (i=0; i<A.vertexNum; i+)tag0Tfar (=0; j <A. uertesNum, j+)if (arcsii !-D) break, return count,以鄰接表作存儲(chǔ)結(jié)構(gòu),設(shè)計(jì)按深度優(yōu)先遍歷圖的非遞歸算法?!窘獯稹繀⒁?21。 已知一個(gè)有向圖的鄰接表,編寫算法建立其逆鄰接表

19、?!窘獯稹吭谟邢驁D中,若鄰接表中頂點(diǎn)vi有鄰接點(diǎn)vj,在逆鄰接表中vj 一定有鄰接點(diǎn)vi,由此得到本題算法思路:首先將逆鄰接表的表頭結(jié)點(diǎn) firstedge域置空,然后逐行將表頭結(jié)點(diǎn)的鄰接點(diǎn)進(jìn)行轉(zhuǎn)化。建立逆鄰接表算法Listvoid List (Adj List A p Adj ListB vertexNum= A.vertexNum;B arcNuni= A.arcNum, for (1=0, i<A.verteKNum; i+) Badjlistfi. firstedge=NULL;for (1=0T i<A vertexNum, 1+)p 1 A. adj Esti. fir

20、s t edge, while (pl) j=plu>adjvex, p2=new ArcNode,p 2-. adj listj. firstedge;B.adjlistj. firstE dge=p lr pl=pl->next;)分別基于深度優(yōu)先搜索和廣度優(yōu)先搜索編寫算法,判斷以鄰接表存儲(chǔ)的有向圖中是否存在由頂點(diǎn)vi到頂點(diǎn)vj的路徑(i工j。【解答】基于深度優(yōu)先遍歷:判斷路徑算法DF合|int DFS (int i, intj)扶nsited數(shù)組已初妁化為 0toph 1Tvisitedi-l; stads(4-+top; yes=0; while (top 11 | | y

21、es=-0)i=stacktop; pdjlistfi. firstedge; while (p && yes=Cl)t=p>adj7ex;if (t=j) yes=l;else if (visitedt=0)(stackf-H+tap,) elseif (Ip)rdum yes;) '基于廣度優(yōu)先遍歷:判斷路徑算法BFS |int BFSfint i, int j)扶仙河數(shù)組已初貽化為0(front 1. reab 1;/饑列首尾指針初始化visitedil-U queue+rear|=i.t yes=0; whil (front Wear 11 yes0)&#

22、163;i=queue+front;pdjlisti. fir 號(hào)亡 dg亡; while (p 拴& yesO) t=p->adjvex,if (t=j) yes= 1P ds 巳 if(71 sitecll= =0) visitedt-li queue+rear|3tf )dse p=p->nesd;)return yes,學(xué)習(xí)自測(cè)及答案0 1 01 0 1,可以看岀,該圖共有()個(gè)頂點(diǎn)1 某無向圖的鄰接矩陣A=° 1 0A 3 B 6C9 D 以上答案均不正確【解答】A2. 無向圖的鄰接矩陣是一個(gè)(),有向圖的鄰接矩陣是一個(gè)()A上三角矩陣 B下三角矩陣 C對(duì)稱矩陣 D無規(guī)律【解答】C, D3. 下列命題正確的是()。A 一個(gè)圖的鄰接矩陣表示是唯一的,鄰接表表

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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)論