【最详细】数据结构(C语言版 第2版)第六章课后习题答案 严蔚敏 等 编著
所有章節答案合集——>傳送門
1.選擇題
( 1)在一個圖中,所有頂點的度數之和等于圖的邊數的()倍。
A. 1/2 B. 1 C. 2 D. 4
答案: C
( 2)在一個有向圖中,所有頂點的入度之和等于所有頂點的出度之和的()倍。
A. 1/2 B. 1 C. 2 D. 4
答案: B
解釋:有向圖所有頂點入度之和等于所有頂點出度之和。
( 3)具有 n 個頂點的有向圖最多有()條邊。
A. n B . n(n-1) C. n(n+1) D . n2
答案: B
解釋:有向圖的邊有方向之分, 即為從 n 個頂點中選取 2 個頂點有序排列, 結果為 n(n-1) 。 ( 4) n 個頂點的連通圖用鄰接距陣表示時,該距陣至少有 () 個非零元素。
A. n
B . 2(n-1)
C. n/2
D . n2
答案: B
( 5) G 是一個非連通無向圖,共有 28 條邊,則該圖至少有()個頂點。
A. 7 B . 8 C. 9 D . 10
答案: C
解釋: 8 個頂點的無向圖最多有 8*7/2=28 條邊,再添加一個點即構成非連通無向圖,故
至少有 9 個頂點。
( 6)若從無向圖的任意一個頂點出發進行一次深度優先搜索可以訪問圖中所有的頂點,
則該圖一定是()圖。
A.非連通 B .連通 C.強連通 D .有向
答案: B
解釋:即從該無向圖任意一個頂點出發有到各個頂點的路徑, 所以該無向圖是連通圖。
( 7)下面( )算法適合構造一個稠密圖 G 的最小生成樹。
A. Prim 算法 B . Kruskal 算法 C. Floyd 算法 D. Dijkstra 算法
答案: A
解釋: Prim 算法適合構造一個稠密圖 G 的最小生成樹, Kruskal 算法適合構造一個稀疏
圖 G 的最小生成樹。
( 8)用鄰接表表示圖進行廣度優先遍歷時,通常借助()來實現算法。
A.棧 B. 隊列 C. 樹 D .圖
答案: B
解釋:廣度優先遍歷通常借助隊列來實現算法,深度優先遍歷通常借助棧來實現算法。
( 9)用鄰接表表示圖進行深度優先遍歷時,通常借助()來實現算法。
A.棧 B. 隊列 C. 樹 D .圖
答案: A
解釋:廣度優先遍歷通常借助隊列來實現算法,深度優先遍歷通常借助棧來實現算法。
( 10)深度優先遍歷類似于二叉樹的() 。 A.先序遍歷 B.中序遍歷 C.后序遍歷 D.層次遍歷
答案: A
( 11)廣度優先遍歷類似于二叉樹的() 。 A.先序遍歷 B .中序遍歷 C.后序遍歷 D.層次遍歷
答案: D
( 12)圖的 BFS 生成樹的樹高比 DFS 生成樹的樹高() 。 A.小 B.相等 C.小或相等 D.大或相等
答案: C
解釋:對于一些特殊的圖,比如只有一個頂點的圖,其 BFS 生成樹的樹高和 DFS 生
成樹的樹高相等。一般的圖,根據圖的 BFS 生成樹和 DFS 樹的算法思想, BFS 生成樹的樹
高比 DFS 生成樹的樹高小。
( 13)已知圖的鄰接矩陣如圖 6.30 所示, 則從頂點 v0 出發按深度優先遍歷的結果是 ()。 圖 6.30 鄰接矩陣
( 14)已知圖的鄰接表如圖 6.31 所示,則從頂點 v0 出發按廣度優先遍歷的結果是()
A . 0 1 3 2 B. 0 2 3 1 C. 0 3 2 1 D . 0 1 2 3
答案: D
( 15)下面()方法可以判斷出一個有向圖是否有環。
A.深度優先遍歷 B.拓撲排序 C.求最短路徑 D .求關鍵路徑
答案: B
2.應用題
( 1)已知圖 6.32 所示的有向圖,請給出:
①每個頂點的入度和出度;
②鄰接矩陣;
③鄰接表;
④逆鄰接表。
答案:
( 2)已知如圖 6.33 所示的無向網,請給出:
①鄰接矩陣;
②鄰接表;
③最小生成樹
答案:
( 3)已知圖的鄰接矩陣如圖 6.34 所示。試分別畫出自頂點 1 出發進行遍歷所得的深度優先生成樹和廣度優先生成樹 。
答案:
( 4)有向網如圖 6.35 所示,試用
迪 杰 斯 特 拉 算 法 求 出 從 頂 點 a 到其 他
各頂點間的最短路徑,完成表6-9
答案:
( 5)試對圖 6.36 所示的 AOE- 網:
① 求 這 個 工 程 最早 可 能 在 什么 時
間結束;
②求每個活動的最早開始時間和最
遲開始時間;
③確定哪些活動是關鍵活動
答案:按拓撲有序的順序計算各個頂點的最早可能開始時間 Ve 和最遲允許開始時間 Vl 。
然后再計算各個活動的最早可能開始時間 e 和最遲允許開始時間 l ,根據 l-e = 0? 來確定關鍵
活動,從而確定關鍵路徑
3.算法設計題
( 1)分別以鄰接矩陣和鄰接表作為存儲結構,實現以下圖的基本操作:
①增加一個新頂點 v, InsertVex(G, v) ;
②刪除頂點 v 及其相關的邊, DeleteVex(G , v);
③增加一條邊 <v , w>, InsertArc(G , v, w);
④刪除一條邊 <v , w>, DeleteArc(G , v, w)
[ 算法描述 ]
假設圖 G 為有向無權圖,以鄰接矩陣作為存儲結構四個算法分別如下:
①增加一個新頂點 v
分析 :如果不把待刪除頂點交換到最后一個頂點的話 ,算法將會比較復雜 ,而伴隨著大量元
素的移動 ,時間復雜度也會大大增加。
③增加一條邊 <v , w>
④刪除一條邊 <v , w>
Status Delete_Arc(MGraph &G,char v,char w)// 在鄰接矩陣表示的圖 G 上刪除邊 (v,w) { if((i=LocateVex(G,v))<0) return ERROR; if((j=LocateVex(G,w))<0) return ERROR; if(G.arcs[j].adj) { G.arcs[j].adj=0; G.arcnum--; } return OK; }//Delete_Arc以鄰接表作為存儲結構,本題只給出 Insert_Arc 算法 .其余算法類似。
Status Insert_Arc(ALGraph &G,char v,char w)// 在鄰接表表示的圖 G 上插入邊 (v,w) { if((i=LocateVex(G,v))<0) return ERROR; if((j=LocateVex(G,w))<0) return ERROR; p=new ArcNode; p->adjvex=j;p->nextarc=NULL; if(!G.vertices.firstarc) G.vertices.firstarc=p; else { for(q=G.vertices.firstarc;q->q->nextarc;q=q->nextarc) if(q->adjvex==j) return ERROR; // 邊已經存在q->nextarc=p; } G.arcnum++; return OK; }//Insert_Arc( 2)一個連通圖采用鄰接表作為存儲結構,設計一個算法,實現從頂點 v 出發的深度優
先遍歷的非遞歸過程。
[算法描述 ]
( 3)設計一個算法,求圖 G 中距離頂點 v 的最短路徑長度最大的一個頂點,設 v 可達
其余各個頂點。
[題目分析 ]
利用 Dijkstra 算法求 v0 到其它所有頂點的最短路徑,分別保存在數組 D[i] 中,然后求出
D[i] 中值最大的數組下標 m 即可。
[算法描述 ]
( 4)試基于圖的深度優先搜索策略寫一算法, 判別以鄰接表方式存儲的有向圖中是否存
在由頂點 v i 到頂點 v j 的路徑( i≠ j )。 [題目分析 ]
引入一變量 level 來控制遞歸進行的層數
[算法描述 ]
( 5)采用鄰接表存儲結構,編寫一個算法,判別無向圖中任意給定的兩個頂點之間是否
存在一條長度為為 k 的簡單路徑。
[算法描述 ]
如果這篇博客對你產生了幫助,還請給給它點個贊哦~,讓更多的人看到它。
總結
以上是生活随笔為你收集整理的【最详细】数据结构(C语言版 第2版)第六章课后习题答案 严蔚敏 等 编著的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【最详细】数据结构(C语言版 第2版)第
- 下一篇: L1-005 考试座位号 (15分) C