《c语言数据结构》第7章 图 自测卷解答.docx
- 文档编号:25394145
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:10
- 大小:144.83KB
《c语言数据结构》第7章 图 自测卷解答.docx
《《c语言数据结构》第7章 图 自测卷解答.docx》由会员分享,可在线阅读,更多相关《《c语言数据结构》第7章 图 自测卷解答.docx(10页珍藏版)》请在冰豆网上搜索。
《c语言数据结构》第7章图自测卷解答
第7章图自测卷解答姓名班级
题号
一
二
三
四
五
总分
题分
16
20
24
10
30
100
得分
一、单选题(每题1分,共16分)前两大题全部来自于全国自考参考书!
(C)1.在一个图中,所有顶点的度数之和等于图的边数的倍。
A.1/2B.1C.2D.4
(B)2.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的倍。
A.1/2B.1C.2D.4
(B)3.有8个结点的无向图最多有条边。
A.14B.28C.56D.112
(C)4.有8个结点的无向连通图最少有条边。
A.5B.6C.7D.8
(C)5.有8个结点的有向完全图有条边。
A.14B.28C.56D.112
(B)6.用邻接表表示图进行广度优先遍历时,通常是采用来实现算法的。
A.栈B.队列C.树D.图
(A)7.用邻接表表示图进行深度优先遍历时,通常是采用来实现算法的。
A.栈B.队列C.树D.图
A.0243156
B.0136542
C.0423165
D.0361542
(C)8.已知图的邻接矩阵,根据算法思想,则从顶点0出发按深度优先遍历的结点序列是
(D)9.已知图的邻接矩阵同上题8,根据算法,则从顶点0出发,按深度优先遍历的结点序列是
A.0243156B.0135642C.0423165D.0134256
(B)10.已知图的邻接矩阵同上题8,根据算法,则从顶点0出发,按广度优先遍历的结点序列是
A.0243651B.0136425C.0423156D.0134256
(C)11.已知图的邻接矩阵同上题8,根据算法,则从顶点0出发,按广度优先遍历的结点序列是
A.0243165B.0135642C.0123465D.0123456
(D)12.已知图的邻接表如下所示,根据算法,则从顶点0出发按深度优先遍历的结点序列是
A.0132B.0231C.0321D.0123
(A)13.已知图的邻接表如下所示,根据算法,则从顶点0出发按广度优先遍历的结点序列是
A.0321B.0123C.0132D.0312
(A)14.深度优先遍历类似于二叉树的
A.先序遍历B.中序遍历C.后序遍历D.层次遍历
(D)15.广度优先遍历类似于二叉树的
A.先序遍历B.中序遍历C.后序遍历D.层次遍历
(A)16.任何一个无向连通图的最小生成树
A.只有一棵B.一棵或多棵C.一定有多棵D.可能不存在
(注,生成树不唯一,但最小生成树唯一,即边权之和或树权最小的情况唯一)
二、填空题(每空1分,共20分)
1.图有邻接矩阵、邻接表等存储结构,遍历图有深度优先遍历、广度优先遍历等方法。
2.有向图G用邻接表矩阵存储,其第i行的所有元素之和等于顶点i的出度。
3.如果n个顶点的图是一个环,则它有n棵生成树。
4.n个顶点e条边的图,若采用邻接矩阵存储,则空间复杂度为O(n2)。
5.n个顶点e条边的图,若采用邻接表存储,则空间复杂度为O(n+e)。
6.设有一稀疏图G,则G采用邻接表存储较省空间。
7.设有一稠密图G,则G采用邻接矩阵存储较省空间。
8.图的逆邻接表存储结构只适用于有向图。
9.已知一个图的邻接矩阵表示,删除所有从第i个顶点出发的方法是将邻接矩阵的第i行全部置0。
10.图的深度优先遍历序列不是惟一的。
11.n个顶点e条边的图采用邻接矩阵存储,深度优先遍历算法的时间复杂度为O(n2);若采用邻接表存储时,该算法的时间复杂度为O(n+e)。
12.n个顶点e条边的图采用邻接矩阵存储,广度优先遍历算法的时间复杂度为O(n2);若采用邻接表存储,该算法的时间复杂度为O(n+e)。
13.图的BFS生成树的树高比DFS生成树的树高小或相等。
14.用普里姆(Prim)算法求具有n个顶点e条边的图的最小生成树的时间复杂度为O(n2);用克鲁斯卡尔(Kruskal)算法的时间复杂度是O(elog2e)。
15.若要求一个稀疏图G的最小生成树,最好用克鲁斯卡尔(Kruskal)算法来求解。
16.若要求一个稠密图G的最小生成树,最好用普里姆(Prim)算法来求解。
17.用Dijkstra算法求某一顶点到其余各顶点间的最短路径是按路径长度递增的次序来得到最短路径的。
18.拓扑排序算法是通过重复选择具有0个前驱顶点的过程来完成的。
三、简答题(每题6分,共24分)
1.【严题集7.1①】已知如图所示的有向图,请给出该图的:
(1)
每个顶点的入/出度;
(2)邻接矩阵;
(3)邻接表;
(4)逆邻接表。
答案:
2.【严题集7.7②】请对下图的无向带权图:
(1)写出它的邻接矩阵,并按普里姆算法求其最小生成树;
(2)写出它的邻接表,并按克鲁斯卡尔算法求其最小生成树。
最小生成树:
3.【严题集7.5②】已知二维数组表示的图的邻接矩阵如下图所示。
试分别画出自顶点1出发进行遍历所得的深度优先生成树和广度优先生成树。
4.【严题集7.11②】试利用Dijkstra算法求图中从顶点a到其他各顶点间的最短路径,写出执行算法过程中各步的状态。
答案暂未提供。
四、【2001年计考研题】给定下列网G:
(10分)
1试着找出网G的最小生成树,画出其逻辑结构图;
2用两种不同的表示法画出网G的存储结构图;
3用C语言(或其他算法语言)定义其中一种表示法(存储结构)的数据类型。
五、算法设计题(每题10分,共30分)
1.【严题集7.14③】编写算法,由依次输入的顶点数目、弧的数目、各顶点的信息和各条弧的信息建立有向图的邻接表。
解:
StatusBuild_AdjList(ALGraph&G)//输入有向图的顶点数,边数,顶点信息和边的信息建立邻接表
{
InitALGraph(G);
scanf("%d",&v);
if(v<0)returnERROR;//顶点数不能为负
G.vexnum=v;
scanf("%d",&a);
if(a<0)returnERROR;//边数不能为负
G.arcnum=a;
for(m=0;m G.vertices[m].data=getchar();//输入各顶点的符号 for(m=1;m<=a;m++) { t=getchar();h=getchar();//t为弧尾,h为弧头 if((i=LocateVex(G,t))<0)returnERROR; if((j=LocateVex(G,h))<0)returnERROR;//顶点未找到 p=(ArcNode*)malloc(sizeof(ArcNode)); if(! G.vertices.[i].firstarc)G.vertices[i].firstarc=p; else { for(q=G.vertices[i].firstarc;q->nextarc;q=q->nextarc); q->nextarc=p; } p->adjvex=j;p->nextarc=NULL; }//while returnOK; }//Build_AdjList 2.【严题集7.15③】试在邻接矩阵存储结构上实现图的基本操作: DeleteArc(G,v,w)。 (刘提示: 删除所有从第i个顶点出发的边的方法是将邻接矩阵的第i行全部置0) 解: //本题中的图G均为有向无权图,其余情况容易由此写出 StatusDelete_Arc(MGraph&G,charv,charw)//在邻接矩阵表示的图G上删除边(v,w) { if((i=LocateVex(G,v))<0)returnERROR; if((j=LocateVex(G,w))<0)returnERROR; if(G.arcs[i][j].adj) { G.arcs[i][j].adj=0; G.arcnum--; } returnOK; }//Delete_Arc 3.【严题集7.22③】试基于图的深度优先搜索策略写一算法,判别以邻接表方式存储的有向图中是否存在由顶点vi到顶点vj的路径(i≠j)。 注意: 算法中涉及的图的基本操作必须在此存储结构上实现。 intvisited[MAXSIZE];//指示顶点是否在当前路径上 intexist_path_DFS(ALGraphG,inti,intj)//深度优先判断有向图G中顶点i到顶点j 是否有路径,是则返回1,否则返回0 { if(i==j)return1;//i就是j else { visited[i]=1; for(p=G.vertices[i].firstarc;p;p=p->nextarc) { k=p->adjvex; if(! visited[k]&&exist_path(k,j))return1;//i下游的顶点到j有路径 }//for }//else }//exist_path_DFS 附加题: 【严题集7.27④】采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径的算法。 (注1: 一条路径为简单路径指的是其顶点序列中不含有重现的顶点。 注2: 此题可参见严题集P207-208中有关按“路径”遍历的算法基本框架。 ) intvisited[MAXSIZE]; intexist_path_len(ALGraphG,inti,intj,intk)//判断邻接表方式存储的有向图G 的顶点i到j是否存在长度为k的简单路径 { { if(i==j&&k==0)return1;//找到了一条路径,且长度符合要求 elseif(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))return1;//剩余路径长度减一 }//for visited[i]=0;//本题允许曾经被访问过的结点出现在另一条路径中 }//else return0;//没找到 }//exist_path_len
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c语言数据结构 c语言数据结构第7章 自测卷解答 语言 数据结构 自测 解答