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

下載本文檔

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

文檔簡介

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

2、復(fù)雜度為()。【解答】O (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)商勺()。【解答】出度 圖的深度優(yōu)先遍歷類似于樹的()遍歷,它所用到的數(shù)據(jù)結(jié)構(gòu)是();圖的廣度優(yōu)先遍歷類似于樹的()遍歷,它所用到的數(shù)據(jù)結(jié)構(gòu)是()。【解答】前序,棧,層序,隊(duì)列對(duì)于含有n個(gè)頂點(diǎn)e條邊的連通圖,利用 Prim算法求最小生成樹的時(shí)間復(fù)雜度為(),利用Kruska

3、l算法求最小生成樹的時(shí)間復(fù)雜度為()。【解答】O (n2) , O (elog2e)【分析】Prim算法采用鄰接矩陣做存儲(chǔ)結(jié)構(gòu),適合于求稠密圖的最小生成樹;Kruskal算法采用邊集數(shù)組做存儲(chǔ)結(jié)構(gòu),適合于求稀疏圖的最小生成樹。 如果一個(gè)有向圖不存在(),則該圖的全部頂點(diǎn)可以排列成一個(gè)拓?fù)湫蛄小!窘獯稹炕芈罚?0)在一個(gè)有向圖中,若存在弧、,則在其拓?fù)湫蛄兄校旤c(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【解答】

4、C£ 口(巧)=2宙【分析】設(shè)無向圖中含有 n個(gè)頂點(diǎn)e條邊,則'Ton個(gè)頂點(diǎn)的強(qiáng)連通圖至少有()條邊,其形狀是()。A n B n+1 C n-1 D n(n-咨E無回路 F有回路 G環(huán)狀 H樹狀【解答】A, G 含n個(gè)頂點(diǎn)的連通圖中的任意一條簡單路徑,其長度不可能超過()。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

5、n E n +1 F n-1【解答】C, F 設(shè)無向圖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ù) ev

6、n(n-1)/2,將e=28代入,有n>8,現(xiàn)已知無向圖非連通,則 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ù)湫蛄小#?0)下面關(guān)于工程計(jì)劃的 AOE網(wǎng)的敘述中,不正確的是()?br /

7、> A關(guān)鍵活動(dòng)不按期完成就會(huì)影響整個(gè)工 程的完成時(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ū)另U僅在于出邊和入邊,邊表中的結(jié)點(diǎn)個(gè)數(shù)都等于有向圖中邊的個(gè)數(shù)。用鄰接矩陣存儲(chǔ)圖,所占用的存儲(chǔ)空間大小只與圖中頂點(diǎn)個(gè)數(shù)有關(guān),而與圖的邊數(shù)無關(guān)。【解答】對(duì)。

8、鄰接矩陣的空間復(fù)雜度為O(n2),與邊的個(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之前,則圖中必有一條弧。【解答】錯(cuò)。只能說明從頂點(diǎn)a到頂點(diǎn)b有一條路徑。 若一個(gè)有向圖的鄰接矩陣中對(duì)角線以下元素均為零,則該圖的拓?fù)湫蛄斜囟ù嬖凇!窘獯?/p>

9、】對(duì)。參見第11題的證明。 在AOE網(wǎng)中一定只有一條關(guān)鍵路徑 ?br /【解答】錯(cuò)。AOE網(wǎng)中可能有不止一條關(guān)鍵路徑,他們的路 徑長度相同。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ù)的總和除以2。 當(dāng)鄰接矩陣A中Aij=1 (或Aj

10、i=1 )時(shí),表示兩頂點(diǎn)之間有邊相連。計(jì)算鄰接矩陣上該頂點(diǎn)對(duì)應(yīng)的行上非零元素的個(gè)數(shù)。6. 證明:生成樹中最長路徑的起點(diǎn)和終點(diǎn)的度均為1。【解答】用反證法證明。設(shè)v1, v2,vK生成樹的一條最長路徑,其中, v1為起點(diǎn),vk為終點(diǎn)。若vk的度為2,取vk的另一個(gè) 鄰接點(diǎn)v,由于生成樹中無回路,所以,v在最長路徑上,顯然 v1, v2,,vk , v勺路徑最長,與假設(shè)矛盾。所以生成樹中最長路徑的終點(diǎn)的度為1。同理可證起點(diǎn)v1的度不能大于1,只能為1。7. 已知一個(gè)連通圖如圖 6-6所示,試給出圖的鄰接矩陣和鄰接表存儲(chǔ)示意圖,若從頂點(diǎn)v1出發(fā)對(duì)該圖進(jìn) 行遍歷,分別給出一個(gè)按深度優(yōu)先遍歷和廣度優(yōu)先遍

11、歷的頂點(diǎn)序列。【解答】鄰接矩陣表示如下:0 101011 011100 100101 100110 111001 00100深度優(yōu)先遍歷序列為:v1 v2 v3 v5 v4 v6廣度優(yōu)先遍歷序列為:v1 v2 v4 v6 v3 v5鄰接表表示如下:8 .圖6-7所示是一個(gè)無向帶權(quán)圖,請(qǐng)分別按Prim算法和Kruskal算法求最小生成樹。囹第8題圖【解答】按Prim算法求最小生成樹的過程如下:(1)按Kruskal算法求最小生成樹的過程如下:9.對(duì)于圖6-8所示的帶權(quán)有向圖,求從源點(diǎn)v1到其他各頂點(diǎn)的最短路徑。圖卜8第g題囹【解答】從源點(diǎn)v1到其他各頂點(diǎn)的最短路徑如下表所示。源點(diǎn) 終點(diǎn) 最短路徑

12、 最短路徑長度v1 v7 v1 v7 7v1 v5 v1 v5 11v1 v4 v1 v7 v4 13 v1 v6 v1 v7 v4 v6 16 v1 v2 v1 v7 v2 22 v1 v3 v1 v7 v4 v6 v3 25 10.如圖6-9所示的有向網(wǎng)圖,利用 Dijkstra算法求從頂點(diǎn)v1到其他各頂點(diǎn)的最短路徑。1516-9第題圖【解答】從源點(diǎn)v1到其他各頂點(diǎn)的最短路徑如下表所示。源點(diǎn)終點(diǎn)最短路徑最短路徑長度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。【解答】任意n個(gè)結(jié)點(diǎn)的有向無環(huán)圖都可以得到一個(gè)拓?fù)湫蛄小TO(shè)拓?fù)湫蛄袨関0v1v2- vn -1 ,我們來證明此時(shí)的鄰接矩陣A為上三角矩陣。證明采用反證法。假設(shè)此時(shí)的鄰接矩陣不是上三角矩陣,那么,存在下標(biāo)i和j (i>j),使得Aij不等于零,即圖中存在從vi到vj的一條有向邊。由拓?fù)湫蛄械亩x可知,在任意拓?fù)湫蛄兄校瑅i的位置一定在vj之前,而在上述拓?fù)湫蛄衯0v1v2- vn -1中,由于i>j ,即vi的位置在vj之后,導(dǎo)致矛盾。因此命題正確。12.算法設(shè)計(jì) 設(shè)計(jì)算法,將一個(gè)無向圖的鄰接矩陣

14、轉(zhuǎn)換為鄰接表。【解答】先設(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 *

15、next;);templatestruct 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.arcbIuniPfcr (i-0; KA.vertezNum; i+)B

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

17、at void ListToMat (AdjMatrix &A, AdjList &B) (A. 7ertcKNum=B v ert Kd4umtA. arcNum=B. arcNum,for (1=0; i<A vatexblum; i+)for (j=Q, j <A. verleKNum, j+)A.arc如=0,far =!* i<A.vertesNum; i+)(p=B alistfi. firstedge,while (p)j= p->atvex;響叫p=p->nesl; 設(shè)計(jì)算法,計(jì)算圖中出度為零的頂點(diǎn)個(gè)數(shù)。【解答】在有向圖的鄰接矩陣中

18、,一行對(duì)應(yīng)一個(gè)頂點(diǎn),每行的非零元素的個(gè)數(shù)等于對(duì)應(yīng)頂點(diǎn)的出度。因此, 當(dāng)某行非零元素的個(gè)數(shù)為零時(shí),則對(duì)應(yīng)頂點(diǎn)的出度為零。據(jù)此,從第一行開始,查找每行的非零元素個(gè)數(shù) 是否為零,若是則計(jì)數(shù)器加 1。具體算法如下:統(tǒng)計(jì)出度.為LI的算法SumZ&roint SuniZero(AdjMatrixA)coun±=0Pfor (i=0; i<A.vertesNum; i+)tag=D,far (j=0; j <A. verteKNum, j+) if (arcsij 1=0) (tag=l,break,)if (tag=0) count+preturn count;以鄰接表作存

19、儲(chǔ)結(jié)構(gòu),設(shè)計(jì)按深度優(yōu)先遍歷圖的非遞歸算法。【解答】參見6.2.1 o 已知一個(gè)有向圖的鄰接表,編寫算法建立其逆鄰接表。【解答】在有向圖中,若鄰接表中頂點(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 List &B)B. vertexNum= A.vertexNum;B arcbluni= A.arcNum,for (1=0, i<A.verteKNum; i+) Badjlistfi.

20、firstedge=NULL;fw (1=0T i<A vertexNum, 1+)(p 1 =A adj Esti firs t edge, whale (pl) j=plu>adjvex, p2=neiv ArcNode,p?->iiKl=B.adjlistj. firstedge;B.adjlistj. firstedge=p lr pl=pl->next;vi到分別基于深度優(yōu)先搜索和廣度優(yōu)先搜索編寫算法,判斷以鄰接表存儲(chǔ)的有向圖中是否存在由頂點(diǎn) 頂點(diǎn)vj的路徑(i乒)。【解答】基于深度優(yōu)先遍歷:判斷路徑算法DFS |int DFS (int i, intj) /

21、Ansited數(shù)組己初始化為 0(Mph 1 Ivisitedi=l P stack+tQp=i, yes=0;while (mp!1 | | yes =0)<i=stacktop;p=adjlisti. firstedge;while (p && yes= =0)(粉爭-湖訴乾;if (t=j) yes=l;else if (visitedt=0)(stack(+t 叩T)else p*p 一破t;)if (Ip) tap;return yes;)基于廣度優(yōu)先遍歷:判斷路役算法BFS |int BFSfint i, intj)例詢囪數(shù)蛆已初貽化為0front 1, re

22、ar 1;儺;列首屋指針初始化visitedil-U queue+rear|=i.t yes=0;while (frontWear 11 yes0)£i=queue+front;pdjlisti. firstedge;while (p && yesO)t=p->adjvex,if (t=j) yes= 1Pds 巳 if(71 sitecll= =0) visited國=1:queue+rear|3tf)dse p=p->nesd;)return yes,學(xué)習(xí)自測及答案0 1 01 0 11 .某無向圖的鄰接矩陣 A° 1 ° J,可以看出,該圖共有()個(gè)頂點(diǎn)A 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)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論