数据结构(C语言)第二版 第六章课后答案

1~5 C B B B C
6~10 B A B A A
11~15 D C C (D,D) B

1.选择题

(1)在一个图中,所有顶点的度数之和等于图的边数的(C)倍。
A. 1/2 B. 1 C. 2 D. 4

任意一条边都对应2个度,所以度数总和是边数总和的两倍。

(2)在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的(B)倍。
A. 1/2 B. 1 C. 2 D. 4

有向图所有顶点的入度之和等于所有顶点的出度之和

(3)具有n 个顶点的有向图最多有(B)条边。
A. n B . n(n-1) C. n(n+1) D . n2

有向图的边有方向之分, 即为从n个顶点中选取 2 个顶点有序排列, 结果为n(n-1)

(4) n 个顶点的连通图用邻接距阵表示时,该距阵至少有(B) 个非零元素。
A. n B . 2(n-1) C. n/2D . n2

连通图一定是无向图,有向的叫做强连通图,连通n个顶点,至少只需要n-1条边就可以,由于无向图的每条边同时关联两个顶点,因此邻接矩阵中每条边被存储了两次,因此至少有2(n-1)个非零元素

(5) G 是一个非连通无向图,共有28 条边,则该图至少有(C)个顶点。
A. 7 B . 8 C. 9 D . 10

8 个顶点的无向图最多有8*7/2=28 条边,再添加一个点即构成非连通无向图,故至少有9 个顶点。

(6)若从无向图的任意一个顶点出发进行一次深度优先搜索可以访问图中所有的顶点,则该图一定是(B)图。
A.非连通 B .连通 C.强连通 D .有向

即从该无向图任意一个顶点出发有到各个顶点的路径, 所以该无向图是连通图。

(7)下面(A)算法适合构造一个稠密图G 的最小生成树。
A. Prim 算法B . Kruskal 算法C. Floyd 算法D. Dijkstra 算法

Prim 算法适合构造一个稠密图G 的最小生成树, Kruskal 算法适合构造一个稀疏图G 的最小生成树。

(8)用邻接表表示图进行广度优先遍历时,通常借助(B)来实现算法。
A.栈B. 队列C. 树D .图

广度优先遍历通常借助队列来实现算法,深度优先遍历通常借助栈来实现算法。

(9)用邻接表表示图进行深度优先遍历时,通常借助(A)来实现算法。
A.栈B. 队列C. 树D .图

广度优先遍历通常借助队列来实现算法,深度优先遍历通常借助栈来实现算法。

(10)图的深度优先遍历类似于二叉树的(A) 。
A.先序遍历B.中序遍历C.后序遍历D.层次遍历

因为图的深度优先遍历算法先访问所在结点,再访问它的邻接点。与二叉树的先序遍历先访问子树的根结点,再访问它的孩子结点(邻接点)类似。

( 11)图的广度优先遍历类似于二叉树的(D) 。
A.先序遍历B .中序遍历C.后序遍历D.层次遍历

图的广度优先遍历算法类似于二叉树的按层次遍历。

(12)图的 BFS 生成树的树高比 DFS 生成树的树高(C) 。
A.小B.相等C.小或相等D.大或相等

对于一些特殊的图,比如只有一个顶点的图,其BFS 生成树的树高和DFS 生
成树的树高相等。一般的图,根据图的BFS 生成树和DFS 树的算法思想, BFS 生成树的树高比DFS 生成树的树高小。

(13)已知图的邻接矩阵如图6.30 所示, 则从顶点v0 出发按深度优先遍历的结果是(C)。

按深度优先遍历:先访问所在结点,再访问它的邻接点,访问过的跳过找下一个未访问的结点,直到访问完所有的结点。即0-1-3-4-2-5-6

(14)已知图的邻接表如图6.31 所示,则从顶点v0 出发按广度优先遍历的结果是(D) ,按深度优先遍历的结果是(D) 。

(15)下面(B)方法可以判断出一个有向图是否有环。
A. 求最小生成树B. 拓扑排序C. 求最短路径D .求关键路径

判断有没有环的方法
深度优先排序
广度优先排序
拓扑排序

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) 。

[ 算法描述]

//以邻接矩阵作为存储结构
//增加一个新顶点v
Status Insert_Vex(MGraph &G, char v){if((G.vexnum+1)>MAX_VERTEX_NUM) return INFEASIBLE;G.vexs[++G.vexnum]=v;return OK;
}
//删除顶点v 及其相关的边,
Status Delete_Vex(MGraph &G,char v){n=G.vexnum;if((m=LocateVex(G,v))<0) return ERROR;G.vexs[m]<->G.vexs[n]; // 将待删除顶点交换到最后一个顶点for(i=0;i<n;i++){G.arcs[m]=G.arcs[n];G.arcs[m]=G.arcs[n];  // 将边的关系随之交换}G.arcs[m][m].adj=0;G.vexnum--;return OK;
}
//增加一条边<v , w>
Status Insert_Arc(MGraph &G,char v,char w){if((i=LocateVex(G,v))<0) return ERROR;if((j=LocateVex(G,w))<0) return ERROR;if(i==j) return ERROR;if(!G.arcs[j].adj){G.arcs[j].adj=1;G.arcnum++;}return OK;
}
//删除一条边<v , w>
Status Delete_Arc(MGraph &G,char v,char 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;
}
//以邻接表作为存储结构
Status Insert_Arc(ALGraph &G,char v,char 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;
}

(2)一个连通图采用邻接表作为存储结构,设计一个算法,实现从顶点v 出发的深度优先遍历的非递归过程。

[ 算法描述]

Void DFSn(Graph G,int v){  // 从第v 个顶点出发非递归实现深度优先遍历图GStack s;SetEmpty(s);Push(s,v);While(!StackEmpty(s)){ Pop(s,k);If(!visited[k]){ visited[k]=TRUE;VisitFunc(k); for(w=FirstAdjVex(G,k);w;w=NextAdjVex(G,k,w)){if(!visited[w]&&w!=GetTop(s)) Push(s,w); }}}
}

(3)设计一个算法,求图G 中距离顶点v 的最短路径长度最大的一个顶点,设v 可达其余各个顶点。

[ 算法描述]

int ShortestPath _ MAX(AMGraph G,int v0){n=G.vexnum;for(v = 0; v<n;++v){ S[v] = false; D[v] = G.arcs[v0][v]; if(D[v]< MaxInt)     Path [v]=v0; else     Path [v]=-1;}S[v0]=true; D[v0]=0; for(i=1;i<n; ++i){ min= MaxInt;for(w=0;w<n; ++w)if(!S[w]&&D[w]<min){v=w; min=D[w];}S[v]=true;for(w=0;w<n; ++w) if(!S[w]&&(D[v]+G.arcs[v][w]<D[w])){D[w]=D[v]+G.arcs[v][w]; Path [w]=v; }}Max=D[0];m=0;for(i=1;i<n;i++)if(Max<D[i]) m=i;return m;
}

(4)试基于图的深度优先搜索策略写一算法, 判别以邻接表方式存储的有向图中是否存在由顶点v i 到顶点v j 的路径( i≠ j )。

[ 算法描述]

int visited[MAXSIZE];
int level = 1;
int exist_path_DFS(ALGraph G,int i,int j){if(i==j) return 1; else{visited[i]=1;for(p=G.vertices[i].firstarc;p;p=p->nextarc , level--){level++;k=p->adjvex;if(!visited[k]&&exist_path(k,j)) return 1;}}if (level==1) return 0;
}

(5)采用邻接表存储结构,编写一个算法,判别无向图中任意给定的两个顶点之间是否存在一条长度为为k 的简单路径。

[ 算法描述]

int visited[MAXSIZE];
int exist_path_len(ALGraph G,int i,int j,int k){if(i==j&&k==0) return 1;else if(k>0){visited[i]=1;for(p=G.vertices[i].firstarc;p;p=p->nextarc){l=p->adjvex;if(!visited[l])if(exist_path_len(G,l,j,k-1)) return 1; }visited[i]=0; }return 0;
}

数据结构(C语言)第二版 第六章课后答案相关推荐

  1. 数据结构(C语言)第二版 第四章课后答案

    数据结构(C语言)第二版 第四章课后答案 1~5 B B C A B 6~10 B B C B B 11~15 A B D (C,B) C 1.选择题 (1)串是一种特殊的线性表,其特殊性体现在(B) ...

  2. 数据结构(C语言)第二版 第三章课后答案

    数据结构(C语言)第二版 第三章课后答案 1~5 C C D A A 6~10 D A B C D 11~15 D D B C B 1.选择题 (1)若让元素1, 2, 3 , 4, 5 依次进栈,则 ...

  3. 数据结构(C语言)第二版 第五章课后答案

    数据结构(C语言)第二版 第五章课后答案 1~5 A D D C A 6~10 C C B D C 11~15 B C A C A 1.选择题 (1)把一棵树转换为二叉树后,这棵二叉树的形态是(A) ...

  4. python第二版第六章课后答案_《Python编程》第六章部分课后练习题

    #6-3 词汇表: 代码:#6-3 词汇表 dic = { '': 'Vectors are sequence containers representing arrays that can chan ...

  5. 数据结构c语言版第二版第三章课后答案,数据结构(C语言版)习题集答案第三章.doc...

    数据结构(C语言版)习题集答案第三章.doc 习题三3.1 3.10 3.13 3.5 3.6 3.15 3.17 3.19 3.24 3.29 3.31 3.51 给定操作序列P1P2P3PiPn( ...

  6. c语言程序设计第二版第五章课后答案甘勇,郑州工程技术学院副院长甘勇来校讲学和指导工作...

    12月12日,郑州工程技术学院副院长甘勇一行莅临我校讲学和指导工作.黄河交通学院评建办公室主任汤迪操.教务处处长贾宗璞,智能工程学院领导班子.主任及骨干教师参加了本次会议,会议由智能工程学院党总支书记 ...

  7. python语言程序设计基础第二版第七章答案-Python核心编程第二版 第七章课后答案...

    注:我使用的python3.5. 其中range和xrange,input和raw_input已经合并 7-1.字典方法.哪个字典方法可以用来把两个字典合并到一起. dict.update(dict2 ...

  8. Python核心编程第二版 第十三章课后答案

    13-1.程序设计.请列举一些面对对象编程与传统旧的程序设计形式相比的先进之处. 没什么只有OO能做到,OO更多的是给了你一种能力,一种忽略细节的能力:忽略的越多,人类有限的智力就可以容纳越多越复杂的 ...

  9. 数据结构C语言版第二版第六章原创总结

    数据结构C语言版第二版第六章原创总结 图章节原创总结

最新文章

  1. 宁愿“大小周”、每天只写 200 行代码、月薪 8k-17k 人群再涨!揭晓中国开发者真实现状...
  2. python语言术语_python的一些术语
  3. JavaScrip有哪些优点
  4. 嵌入式实时操作系统Ucos3
  5. 消息推送平台高可用实践(下)
  6. 小区移动基站安全吗?会杀人于无形吗?
  7. Java 8 Comparator: 列表排序
  8. Matlab条形图bar误差棒绘制errorbar
  9. android fota解决方案,Android智能终端FOTA方案的制作方法
  10. Win7配置SVN详细步骤(服务器和客户端)
  11. 安全基础--21--安全运维
  12. STC15学习笔记 第一章 流水灯与数码管
  13. 家用电器行业十二月行业动态报告:11月冰洗表现亮眼,空调价格回升持续(20201231).PDF
  14. 2019 10月 月末总结
  15. 正点原子STM32(基于HAL库)3
  16. 高通平台开发系列讲解(网络篇)SFE软加速简介
  17. 长短期记忆(Long Short-Term Memory,LSTM)
  18. 共识机制-区块链核心技术之一
  19. [开发技巧]·TopN指标计算方法
  20. 海盗喝啤酒问题Java解法

热门文章

  1. 谷歌扩展漏洞赏金计划
  2. 设计稿是750px时的,rem设置
  3. 4.如何避免缓存穿透、缓存击穿、缓存雪崩
  4. 电动车怎样才算逆向行驶
  5. Python零基础入门一
  6. 「非编软件」达芬奇非编软件升级为付费版的6个理由
  7. WIN7+Ubuntu双系统 Grub修复
  8. 【推荐】PHP-集成函数总结
  9. 使用ntfs-3g挂载NTFS格式的移动硬盘
  10. mac 关于idevice的用法,查看连接设备的信息