1、大数据结构单元8练习参考问题详解单元练习8一判断题(下列各题,正确的请在前面的括号打7 ;错误的打X )(V)(l)图可以没有边,但不能没有顶点。(X )(2)在无向图中,(Vi, V2 )与(V2 , V1)是两条不同的边。(X )(3)令B接表只能用于有向图的存储。3)(4)个图的邻接矩阵表示是唯一的。(X )(5)用邻接矩阵法存储一个图时,所占用的存储空间大小与图中顶点个数无关,而只与图的 边数有关。(X )(6)有向图不能逬行广度优先遍历。()(7)若一个无向图的以顶点Vi为起点逬行深度优先遍历,所得的遍历序列唯一,则可以唯一 确走该图。(V )(8)存储无向图的邻接矩阵是对称的,因此
2、只要存储邻接矩阵的上三角(或下三角)部分就 可以了。(X )( 9 )用邻接表法存储图时,占用的存储空间大小只与图中的边数有关,而与结点的个数无关。(V)(10)若一个无向图中任一顶点出发,逬行一次深度优先遍历,就可以访问图中所有的顶点, 则该图一走是连通的。二填空题(1 )图常用的存储方式有令腹矩阵和邻接表等。(2 )图的遍历有: 深度优先搜 和广度优先搜等方法。(3)有n条边的无向图邻接矩阵中,1的个数是_2n(4 )有向图的边也称为_弧。(5 )图的邻接矩阵表示法是表示一之间相邻关系的矩阵。(6 )有向图G用邻接矩阵存储,其第i行的所有元素之和等于顶点i的 出度。(7)n个顶点e条边的图
3、若采用邻接矩阵存储,则空间复杂度为:0()。(8)n个顶点e条边的图若采用邻接表存储,则空间复杂度为:O(n+e)。(9 )设有一稀疏图G ,则G采用_邻接表存储比较节省空间。(10)设有一稠密图G ”则G采用邻接矩阵一 存储比较节省空间.(11 )图的逆邻接表存储结构只适用于有向图。(12 ) n个顶点的完全无向图有 n(n-l)/2_ 条边。(13)有向图的邻接表表示适于求顶点的出度 (14 )有向图的邻接矩阵表示中,第i列上非0元素的个数为顶点V,的 入度。(15)对于具有n个顶点的图,其生成树有且仅有n-1条边。(16 )对n个顶点,e条弧的有向图,其邻接表表示中,需要n+e个结点。(
4、17)从图中某一顶点出发,访遍图中其余顶点,且使每一顶点仅被访问一次,称这一过程为图 的遍历。(18) 无向图的邻接矩阵一走是 对称 矩阵。(19)_个连通网的最小生成树是该图所有生成树中 权 最小的生成树。(20 )若要求一个稠密图G的最小生成树.最好用 Prim 算法来求解。三选择题(1)在一个图中,所有顶点的度数之和等于图的边数的(C )倍。A 1/2B. 1C. 2D4(2)在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的(B )倍。A 1/2B. 1C2D. 4(3 )对于一个具有n个顶点的有向图的边数最多有(B )。AnB n(n-1)C . n(n-l)/2D . 2n
5、(4 )在一个具有n个顶点的无向图中,要连通全部顶点至少需要(C)条边。AnB n+1C n-1D . n/2(5)有8个结点的有向元全图有(C )条边。A14B. 28C. 56D. 112(6 )深度优先遍历类似于二叉树的(A )。A先序遍历B中序遍丿力c后序遍历D.层次遍历(7 )广度优先遍历类似于二叉树的(D )。A先序遍历B中序遍丿力c后序遍历D.层次遍历(8)任可一个无向连通图的最小生成树(A )oA只有一棵B .棵或多棵C一定有多棵D可能不存在D.n行任意列(11)对于一个具有n个顶点和e条边的无向图,采用邻接表表示,则表头向星大小为(CA . n-1 B . n+1 C . n
6、 D . n+e(12 )在图的表示法中,表示形式唯一的是(A )。A.邻接矩阵表示法 B.邻接表表示法C.逆邻接表表示法 D.邻接表和逆邻接表表示法(13 )在一个具有n个顶点e条边的图中,所有顶点的度数之和等于(C )。An Be C2n D2e(14 )下列图中r度为3的结点是(B XA Vl B. V2C. V3D. V4A连通图B.强连通图C.生成树D.无环图(16 )如下图所示,从顶点a出发r按深度优先逬行遍历,则可能得至啲一种顶点序列为(D)算法。(18 )最小生成树的构造可使用(A Aprim算法 B卡尔算法C哈夫晏算法D.迪杰斯特拉算法(19 )下面关于图的存储结构的叙述中正
7、确的是(A )。A用邻接矩阵存储图,占用空间大小只与图中顶点数有关,而与边数无关B用邻接矩阵存储图,占用空间大小只与图中边数有关,而与顶点数无关C.用邻接表存储图,占用空间大小只与图中顶点数有关,而与边数无关D .用邻接表存储图,占用空间大小只与图中边数有关,而与顶点数无关(20 )连通分星是(C )的极通子图。A .树 B .图 C .无向图 D .有向图四应用题(30分)1 .有向图如下图所示,画出邻接矩阵W邻接表解:(1)邻接矩阵1 2 3 4 51P 1 1 0 1、20 0 0 1030 0 0 0 1410 0 0 050 0 0 102 4A 5A1A4A(2)沁表123452已
8、知一个无向图有6个结点,9条边,这9条边依次为(0,1)40,2)40,4)40,5) # (1,2) , (2,3) , (2,4), (3,4) , (4,5)。试画出该无向图,并从顶点0出发,分 别写出按深度优先搜索和按广度优先搜索进行遍历的结点序列。(5分)解:从顶点0出发的深度优先搜索遍历的结点序列:0 1234 5(答案不唯一)从顶点0出发的广度优先搜索遍历的结点序列:0 1245 3(答案不唯一)3 已知一个无向图的顶点集为:a , b , C, d, e,其邻接矩阵如下,画出草图,写出顶点a出发按深度优先搜索逬行遍历的结点序列。(5分)010011001000011011011
9、0110解:(2)深度优先搜索:a b d c e (答案不唯一)广度优先搜索:a b e d c (答案不唯一)4 网G的邻接矩阵如下,试画出该图,并画出它的一棵最小生成树。0810110803013103040110407013070解:最小生删:Q(1)画出相应的图;(2)要使此图为完全图需要增加几条边。113 413 75.已知某图G的邻接矩阵如图r0 10 110 100 10 110 10解:(1)(2 )完全无向图应具有的边数为:n*(n-l)l/2=4*(4-l)/2=6 ,所以还要增加2条边(如右图6已知如图所示的有向图,请给出该图的:(1)每个顶点的入/出度;(2)邻接表;
10、(3 )邻接矩阵。解:(1)(2)顶点123456入度321122出度0223I3(3)7如图,请完成以下操作:(2)写出无向带权图的邻接矩阵;(3)设起点为a,求具最小生成树。b6解:(1 )邻接矩阵为:(2 )起点为a ,可以直接由原始图画出最小生成树04300CO00CO40559CO00CO350500COCO50055076540090070300CO00CC006302CO00S005C02060054COCO608给走下列网G:(1)画出网G的邻接矩阵;(2 )画出网G的最小生成树。解:五.程序题填空题图G为有向无权图,试在邻接矩阵存储结构上实现删除一条边(v,w)的操作:Del
11、eteArc(G,v,w)。 若无顶点v或w ,返回ERROR;若成功删除,则边数减1 ,并返回0K。(提示:删除一条边的操作,可以将邻接矩阵的第i行全部置0 )解:Status DeleteArc(MGraph &Grchar vrchar w) 在邻接矩阵表示的图 G 上删除边(vzw)if (i=LocateVex(G/v)0) return ERROR ;if (j=LocateVex(G/w)0) return ERROR ;if (G.arcsij.adj)G.arcsij.adj= 0 ;G.arcnum ; (或 G.arcnum=G.arcnum-l )return OK ;
12、六算法题1.编写一个无向图的邻接矩阵转换成邻接表的算法。2 .以知有n个顶点的有向图邻接表,设计算法分别实现以下功能:(1)求出图G中每个顶点的出度、入度。(2)求出G中出度最大的一个顶点,输出其顶点序号。(3 )计算图中度为0的顶点数。1 .解:本题思想是逐个扫描邻接矩阵的各个元素,若第i行第j列的元素为1,则相应的邻接表的 第i个单链表上增加一个j结点。void trans(i nt edges nn , Adj list adj) intij;edge node *p;for (i=0;in;i+) adji.data=i;adji.li nk=NULL;)for (i=0;in;i+)
13、for (j=OJadjvex=j;p-next=adji.link;adji.li nk二p;2(1)求出度的思想:计算出邻接表中第i个单链表的结点数即可。int outdegree(adjlist adjjnt v) int degree=O;edgenode *p;p=adjv.link;while (p! = NULL) degree+;p=p-next;return degree;void printout(adjlist adjjnt n) int i,degree;printf(The Outdegree are:nM);fo(i=0;ivn;i+) degree=outdegr
14、ee(adjj);printf(n(%d/%d)ii/degree);求入度的思想:计算出邻接表中结点i的结点数即可。 int indegree(adjlist adjjnt njnt v) int i/j/degree=O;edgenode *p;for (i=0;iadjvex=v)degree+;p=p-n ext;return degree;void printin(adjlist adjjnt n) int i.degree;printf(The Indegree are:nM);for (i=0;in;i+) degree=Indegree(adj/n/i);printf(n(%d
15、/%d)ii/degree);(2)求最大庚的算法void maxoutdegree(adjlist adjjnt n) int maxdegree=Ormaxv=O/degreefi;for (i=0;i maxdegree) maxdegree=degree;maxv=i;printf(maxoutdegree %d/maxvertex=%d,/maxdegree/maxv);(3)求度为0的顶点数的算法int outzero(adjlist adjrint n) int num=0J;for (i=0;in;i+)if (outdegree(adjJ)=0)num+;return num
16、;模拟考题1已知如图所示的有向图,请给出该图的:(1)每个顶点的入度和出度;(2)逆邻接表。解:(1) (2)2给走下列网G:顶点123456入度321122出度022313(1 )写出网G以B为顶点的广度优先遍历的序列;(2 )画出网G的最小生成树。3无向图G如图所示r(l)试画出邻接矩阵;(2)写出从A出发的深度优先遍历的序列。3已知图G的邻接表如下,以顶点1为出发点,完成下列问题:(1)写出以顶点1为出发点的广度优先遍历序列;(2)画出以顶点1为出发点的深度优先搜索得到的一棵二叉树。 解:(1)广度优先遍历序列:1,2 , 5,4,3(2)深度优先搜索得到的一棵二叉树:5 试填空完成深度
17、优先搜索的递归函数。#define MAXVEX 100struct vertex/走义图的最大顶点数/顶点集合/边的集合int visitedMAXVEX;void dfs(adjlist adjjnt v) int i;struct edgenode *p;for (i=l;ilink ;while ( p! = NULL )if (visitedp-adjvex= 0 ) dfs(adjlist, p-adjvex ); p= p-next ;/顶点编号/顶点的信息;typedef struct graphstruct vertex vexsMAXVEX; int edgesMAXVEX MAXVEX;sdjmax;/深度优先搜索的递归函数/给visited数组赋初值0取v的边的表头指针从v的未访问过的邻接点出发进行深度优先搜索找V的下一个邻接点
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1