《数据结构与算法第6章图答案》由会员分享,可在线阅读,更多相关《数据结构与算法第6章图答案(14页珍藏版)》请在金锄头文库上搜索。
1、课后习题讲解1.填空题设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。【解答】0,n(n-1)/2,0,n(n-1)【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。任何连通图的连通分量只有一个,即是()。【解答】其自身图的存储结构主要有两种,分别是()和()。【解答】邻接矩阵,邻接表【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。【解答】o(n+e)【分析】在无向图的
2、邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为0(n+2e)=0(n+e)。已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。【解答】求第j列的所有元素之和有向图G用邻接矩阵Ann存储,其第i行的所有元素之和等于顶点i的()。【解答】出度图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。【解答】前序,栈,层序,队列对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal算法求最小生成树的时间复杂度为()。【解答】0(n2),0(el
3、og2e)【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。【解答】回路在一个有向图中,若存在弧、,则在其拓扑序列中,顶点vi,vj,vk的相对次序为()。【解答】vi,vj,vk【分析】对由顶点vi,vj,vk组成的图进行拓扑排序。2.选择题在一个无向图中,所有顶点的度数之和等于所有边数的()倍。A1/2B1C2D4【解答】C【分析】设无向图中含有n个顶点e条边,则吐。n个顶点的强连通图至少有()条边,其形状是()。AnBn+1Cn-1
4、Dnx(n-1)E无回路F有回路G环状H树状【解答】A,G含n个顶点的连通图中的任意一条简单路径,其长度不可能超过()。A1Bn/2Cn-1Dn【解答】C【分析】若超过n-1,则路径中必存在重复的顶点。对于一个具有n个顶点的无向图,若采用邻接矩阵存储,则该矩阵的大小是()。AnB(n-1)2Cn-1Dn2【解答】D图的生成树(),n个顶点的生成树有()条边。A唯一B不唯一C唯一性不能确定DnEn+1Fn-1【解答】C,F设无向图G=(V,E)和G=(V,E),如果G是G的生成树,则下面的说法中错误的是()。AG为G的子图BG为G的连通分量CG为G的极小连通子图且V=VDG是G的一个无环子图【解
5、答】B【分析】连通分量是无向图的极大连通子图,其中极大的含义是将依附于连通分量中顶点的所有边都加上,所以,连通分量中可能存在回路。G是一个非连通无向图,共有28条边,则该图至少有()个顶点。A6B7C8D9【解答】D【分析】n个顶点的无向图中,边数esn(n-1)/2,将e=28代入,有n8,现已知无向图非连通,则n=9。最小生成树指的是()。A由连通网所得到的边数最少的生成树B由连通网所得到的顶点数相对较少的生成树C连通网中所有生成树中权值之和为最小的生成树D连通网的极小连通子图【解答】C判定一个有向图是否存在回路除了可以利用拓扑排序方法外,还可以用()。A求关键路径的方法B求最短路径的方法
6、C广度优先遍历算法D深度优先遍历算法【解答】D【分析】当有向图中无回路时,从某顶点出发进行深度优先遍历时,出栈的顺序(退出DFSTraverse算法)即为逆向的拓扑序列。下面关于工程计划的AOE网的叙述中,不正确的是()?br/A关键活动不按期完成就会影响整个工程的完成时间B任何一个关键活动提前完成,那么整个工程将会提前完成C所有的关键活动都提前完成,那么整个工程将会提前完成D某些关键活动若提前完成,那么整个工程将会提前完【解答】B【分析】AOE网中的关键路径可能不止一条,如果某一个关键活动提前完成,还不能提前整个工程,而必须同时提高在几条关键路径上的关键活动。3.判断题一个有向图的邻接表和逆
7、邻接表中的结点个数一定相等。【解答】对。邻接表和逆邻接表的区别仅在于出边和入边,边表中的结点个数都等于有向图中边的个数。用邻接矩阵存储图,所占用的存储空间大小只与图中顶点个数有关,而与图的边数无关。【解答】对。邻接矩阵的空间复杂度为0(n2),与边的个数无关。图G的生成树是该图的一个极小连通子图【解答】错。必须包含全部顶点。无向图的邻接矩阵一定是对称的,有向图的邻接矩阵一定是不对称的【解答】错。有向图的邻接矩阵不一定对称,例如有向完全图的邻接矩阵就是对称的。对任意一个图,从某顶点出发进行一次深度优先或广度优先遍历,可访问图的所有顶点。【解答】错。只有连通图从某顶点出发进行一次遍历,可访问图的所
8、有顶点。在一个有向图的拓扑序列中,若顶点a在顶点b之前,则图中必有一条弧。【解答】错。只能说明从顶点a到顶点b有一条路径。若一个有向图的邻接矩阵中对角线以下元素均为零,则该图的拓扑序列必定存在。【解答】对。参见第11题的证明。在AOE网中一定只有一条关键路径?br/【解答】错。AOE网中可能有不止一条关键路径,他们的路径长度相同。4. n个顶点的无向图,采用邻接表存储,回答下列问题?br/(1)图中有多少条边?任意两个顶点i和j是否有边相连?任意一个顶点的度是多少?br/【解答】边表中的结点个数之和除以2。第i个边表中是否含有结点j。该顶点所对应的边表中所含结点个数。5. n个顶点的无向图,采
9、用邻接矩阵存储,回答下列问题:图中有多少条边?任意两个顶点i和j是否有边相连?任意一个顶点的度是多少?【解答】邻接矩阵中非零元素个数的总和除以2。当邻接矩阵A中Aij=1(或Aji=l)时,表示两顶点之间有边相连。计算邻接矩阵上该顶点对应的行上非零元素的个数。6证明:生成树中最长路径的起点和终点的度均为1。【解答】用反证法证明。设v1,v2,,vk是生成树的一条最长路径,其中,v1为起点,vk为终点。若vk的度为2,取vk的另一个邻接点v,由于生成树中无回路,所以,v在最长路径上,显然v1,v2,vk,v的路径最长,与假设矛盾。所以生成树中最长路径的终点的度为1。同理可证起点v1的度不能大于1
10、,只能为1。7已知一个连通图如图6-6所示,试给出图的邻接矩阵和邻接表存储示意图,若从顶点v1出发对该图进行遍历,分别给出一个按深度优先遍历和广度优先遍历的顶点序列。16-6策丁题區【解答】邻接矩阵表示如下:深度优先遍历序列为:v1v2v3v5v4v6广度优先遍历序列为:v1v2v4v6v3v5邻接表表示如下:?12-46A.JR-1.3.4A込.25.A”1$6A-r-讪:14A-A14人8图6-7所示是一个无向带权图,请分别按Prim算法和Kruskal算法求最小生成树。【解答】按Prim算法求最小生成树的过程如下:按Kruskal算法求最小生成树的过程如下:to佶)9对于图6-8所示的带
11、权有向图,求从源点v1到其他各顶点的最短路径。【解答】从源点v1到其他各顶点的最短路径如下表所示。源点终点最短路径最短路径长度v1v7v1v77v1v5v1v511v1v4v1v7v413v1v6v1v7v4v616v1v2v1v7v222v1v3v1v7v4v6v32510如图6-9所示的有向网图,利用Dijkstra算法求从顶点v1到其他各顶点的最短路径。15【解答】从源点v1到其他各顶点的最短路径如下表所示。源点终点最短路径最短路径长度vlv3v1v315v1v5vlv515vlv2vlv3v225vlv6vlv3v2v640vlv4vlv3v2v445ll证明:只要适当地排列顶点的次序
12、,就能使有向无环图的邻接矩阵中主对角线以下的元素全部为0。【解答】任意n个结点的有向无环图都可以得到一个拓扑序列。设拓扑序列为v0vlv2.vn-l,我们来证明此时的邻接矩阵A为上三角矩阵。证明采用反证法。假设此时的邻接矩阵不是上三角矩阵,那么,存在下标i和j(ij),使得Aij不等于零,即图中存在从vi到vj的一条有向边。由拓扑序列的定义可知,在任意拓扑序列中,vi的位置一定在vj之前,而在上述拓扑序列v0vlv2.vn-l中,由于ij,即vi的位置在vj之后,导致矛盾。因此命题正确。l2.算法设计设计算法,将一个无向图的邻接矩阵转换为邻接表。【解答】先设置一个空的邻接表,然后在邻接矩阵上查
13、找值不为零的元素,找到后在邻接表的对应单链表中插入相应的边表结点。邻接矩阵存储结构定义如下:constintMaxSize=l0;templatestructAdjMatrixTvertexMaxSize;存放图中顶点的数组intarcMaxSizeMaxSize;存放图中边的数组intvertexNum,arcNum;图的顶点数和边数;邻接表存储结构定义如下:constintMaxSize=10;structArcNode定义边表结点intadjvex;邻接点域ArcNode*next;;templatestructVertexNode定义顶点表结点Tvertex;ArcNode*first
14、edge;structAdjListVertexNodeadjlistMaxSize;intvertexNum,arcNum;图的顶点数和边数;具体算法如下:邻崔矩阵转需邹接表算生MitToListvoidMatToLisXAdjMatrix&A,AdjList&BJiifB.verteKNum=A.vertexNum;B.arcNijm=A.arcKum;fcr(1=0;i-A.verteKNuni,1+丄)B.adjlistR.firstedge=NULLfor(i=0,iA.vertExNum;i十十)for或j+)if;-(A.arc:ij!=0、p=LeivArcNode;p-adjvez=j;p-faeKt.=B.adjlisti.firstedge;B.adjlisti.firstedgep;设计算法,将一个无向图的邻接表转换成邻接矩阵。【解答】在邻接表上顺序地取每个边表中