《数据结构》-第六章 图(习题)

第六章 图-练习题

本章作为非线性结构中的另一类结构,以多对多的数据结构形式存在,图中结点之间关系可以是任意的,任意两个元素之间都可能相关。相比于树型结构,有更广泛的应用。

本章知识点和考点较为集中,因本章涉及较多算法,所占考分比重较大,常以选择题、综合应用题的形式出现。

一、选择题

 1. n 个顶点的连通图用邻接距阵表示时,该距阵至少有 ( ) 个非零元素。

    A.n            B.2(n-1)           C.n/2            D.n

【答案】B。

2. G 是一个非连通无向图,共有 28 条边,则该图至少有( )个顶点。

    A.7             B.8                 C.9                D.10

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

3. 若从无向图的任意一个顶点出发进行一次深度优先搜索可以访问图中所有的顶点,则该图一定是( )图。

    A.非连通         B.连通        C.强连通        D.有向

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

4. ①深度优先遍历类似于二叉树的( )。

    A.先序遍历        B.中序遍历       C.后序遍历       D.层次遍历

    ②广度优先遍历类似于二叉树的( )。

    A.先序遍历        B .中序遍历      C.后序遍历        D .层次遍历

【答案】① A;② D

5. 图的 BFS 生成树的树高比 DFS 生成树的树高( )。

   A.小             B.相等              C.小或相等           D.大或相等

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

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

   A.0 1 3 2             B.0 2 3 1             C. 0 3 2 1            D .0 1 2 3

【答案】①D;②D。

7. 一个有n个顶点和n条边的无向图一定是( )。

    A.连通的              B.不连通的             C.无环的                D.有环的

【答案】D。若一个无向图有n个顶点和n-1条边,可以使它连通但没有环(即生成树),但再加一条边,在不考虑重边的情形下,则必然会构成环。

8.若无向图G=(V,E)中含有7个顶点,要保证图G在任何情况下都是连通的,则需要的边数最少是( ).

    A.6                 B.15              C.16             D. 21

【答案】C。题干要求在“任何情况"下都是连通的,考虑最极端的情形,即图G的6个顶点构成一个完全无向图,再加上-条边后,第7个顶点必然与此完全无向图构成一个连通图,所以最少边数=6x5/2+1= 16.若边数n小于等于15,可以使这n条边仅连接图G中的某6个顶点,从而导致第7个顶点无法与这6个顶点构成连通图(不满足“任何情况")。

9. 设图的邻接矩阵A如下所示,各顶点的度依次是( )

    A.1,2,1,2          B.2,2,1,1            C.3,4,2,3           D.4,4,2,2

【答案】C。邻接矩阵A为非对称矩阵,说明图是有向图,度为入度与出度之和。各顶点的度是矩阵中此结点对应的行(对应出度)和列(对应入度)的非零元素之和。

10. 对于一个有n个顶点的图:若是连通无向困,其边的个数至少为( ); 若是强连通有向图,其边的个数至少为( ).

    A. n-1,n            B. n-1,n(n-1)        C. n,n               D. n, n(n-1)

【答案】A。对于连通无向图,边最少即构成一棵树的情形; 对于强连通有向图,边最少即构成一个有向环的情形。

11. 无向图G有23条边,度为4的顶点有5个,度为3的顶点有4个,其余都是度为2的顶点,则图G最多有( )个顶点。

   A.11                    B.12                  C.15                   D.16

【答案】D。由于在具有n个顶点、e条边的无向图中,有ΣTD(vi)=2e,故可求得度为2的顶点数为7,从而最多有16个顶点。

12. 在有n个顶点的有向图中,每个顶点的度最大可达( ) .

    A. n                  B. n-1                 C.2n                   D. 2n- 2

【答案】D。在有向图中,项点的度等于入度与出度之和。n个顶点的有向图中,任意一个顶点最多还可以与其他n-1个顶点有一对指向相反的边相连。

13. 具有6个顶点的无向图,当有( )条边时能确保是一个连通图。

    A.8                   B.9                  C.10                   D.11

【答案】D。5个顶点构成一个完全无向图,需要10条边:再加上1条边后,能保证第6个顶点必然与此完全无向图构成一个连通图, 故共需11条边。

14.巳知无向图G含有16条边,其中度为4的顶点个数为3,度为3的顶点个数为4,其他顶点的度均小于3.图G所含的顶点个数至少是( ).

  A.10                B.11                   C.13                    D.15

【答案】B。无向图边数的2倍等于各顶点度数的总和。由于其他顶点的度均小于3,设它们的度都为2,设它们的数量是x,列出这方程4x3 +3x4+ 2x= 16x2,解得x=4。4+4+3=11,选项B正确。

15. 若图的邻接矩阵中主对角线上的元素皆为0,其余元素全为1,则可以断定该图一定( )。

   A.是无向图         B.是有向图         C.是完全图       D.不是带权图

【答案】C。除主对角线上的元素外,其余元素全为1,说明任意两个顶点之间都有边相连,因此该图一定是完全图。

16. 假设有n个顶点、e条边的有向图用邻接表表示,则删除与某个顶点v相关的所有边时间复杂度为( ).

  A. O(m)               B. O(e)              C.O(n+e)             D. O(ne)

【答案】C。删除与某顶点v相关的所有边的过程如下:先删除下标为v的项点表结点的单链表,出边数最多为n-1,对应时间复杂度为O(n);再扫描所有边表结点,删除所有的项点v的入边,对应时间复杂度为0(e)。故总的时间复杂度为o(n+ e)。

17. 邻接多重表是( )的存储结构。

  A.无向图              B.有向图           C.无向图和有向图            D.都不是

【答案】A。邻接多重表是无向图的存储结构。

18. 下列关于广度优先算法的说法中,正确的是( ).

       I.当各边的权值相等时,广度优先算法可以解决单源最短路径问题

       II,当各边的权值不等时,广度优先算法可用来解决单源最短路径问题

       III.广度优先遍历算法类似于树中的后序遍历算法

       IV.实现图的广度优先算法时,使用的数据结构是队列

    A. I. IV                            B. II、 III、 IV

    C. II、 IV                        D. I、II、IV

【答案】A。广度优先搜索以起始结点为中心,一层一层地向外层扩展遍历图的顶点,因此无法考虑到边权值,只适合求边权值相等的图的单源最短路径。广度优先搜索相当于树的层序遍历,II错误。广度优先搜索需要用到队列,深度优先搜索需要用到栈,IV 正确。

19. 对一个有n个顶点、e条边的图采用邻接表表示时,进行DFS遍历的时间复杂度为( ),空间复杂度为( ); 进行BFS遍历的时间复杂度为( ), 空间复杂度为( )。

    A. O(n)            B. O(e)          C. O(n+e)         D. O(1)

【答案】①C;②A;③C;④A。深度优先遍历时,每个顶点表结点和每个边表结点均查一次, 每个顶点递归调用一次,需要借助一个递归工作栈:而广度优先遍历时,也是每个顶点表结点和每个边表结点均查找一次,每个顶点进入队列一次。故都是选C,A.

20. 对有n个顶点、e条边的图采用邻接矩阵表示时,进行DFS遍历的时间复杂度为( ),进行BFS遍历的时间复杂度为( )。

    A. O(n3)          B. O(e)           C. O(n+e)          D. O(e)

【答案】①A;②A。采用邻接矩阵表示时,查找一个顶点所有出边的时间复杂度为O(n), 共有n个顶点,故时间复杂度均为0(n2)。

21. 下面的( ) 方法可以判断出一个有向图是否有环(回路)。

     I. 深度优先遍历      II. 拓扑排序       III. 求最短路径         IV. 求关键路径

    A.I、II、IV          B. I、II、IV        C.I、 II、III       D.全部可以

【答案】A。使用深度优先遍历,若从有向图.上的某个顶点u出发,在DFS(u)结束之前出现一条从项点v到u的边,由于v在生成树上是u的子孙,则图中必定存在包含u和v的环,因此深度优先遍历方法可以检测出一个有向图是否有环。拓扑排序时,当某顶点不为任何边的头时才能加入序列,存在环路时环路中的顶点一直是某条边的头,不能加入拓扑序列。也就是说,还存在无法找到下一个可以加入拓扑序列的顶点,则说明此图存在回路。最短路径是允许有环的。关键路径本身虽然不允许有环,但求关键路径的算法本身无法判断是否有环,判断是否有环是关键路径的第一步一拓扑排序。

22. 若一个有向图的顶点不能排在一个拓扑序列中,则可判定该有向图( )。

   A.是一个有根的有向图             B.是一个强连通图

   C.含有多个入度为0的顶点       D.含有顶点数目大于1的强连通分量

【答案】D。若不存在拓扑排序,则表示图中必定存在回路,该回路构成一个强连通分量(不然理解顶点数目大于1的强连通分量中必然存在回路)。

23. 以下关于拓扑排序的说法中,错误的是( )。

      I. 若某有向图存在环路,则该有向图一定不存在拓扑排序

     II.在拓扑排序算法中为暂存入度为零的顶点,可以使用栈,也可以使用队列

     III.若有向图的拓扑有序序列唯一,则图中每个顶点的入度和出度最多为I

    A. I、II           B. II、III           C. II           D. III

【答案】D。1中,对于一个存在环路的有向图,使用拓扑排序算法运行后,肯定会出现有环的子图,在此环中无法再找到入度为0的结点,拓扑排序也就进行不下去。II中,注意,若两个结点之间不存在祖先或子孙关系,则它们在拓扑序列中的关系是任意的(即前后关系任意),因此使用栈和队列都可以,因为进栈或队列的都是入度为0的结点,此时入度为0的所有结点是没有关系的。III是难点,若拓扑有序序列唯一,则很自然地让人联想到一个线性的有向图(错误),下图的拓扑序列也是唯一的,但度却不满足条件。

 24.下列AOE网表示一项包含8个活动的工程。通过同时加快若干活动的进度可以缩短整个工程的工期。下列选项中,加快其进度就可以缩短工程工期的是( )。

    A. c和e              B.d和C          C. f和d             D. f和h

【答案】C。找出AOE网的全部关键路径为bdcg、bdeh 和bfh.根据定义,只有关键路径上的活动时间同时减少时,才能缩短工期。选项A、B和D并不包含在所有的关键路径中,只有C包含,因此只有加快f和d的进度才能缩短工期。

25. 下面关于求关键路径的说法中,不正确的是( )。

    A.求关键路径是以拓扑排序为基础的

   B.一个事件的最早发生时间与以该事件为始的弧的活动的最早开始时间相同

   C.一个事件的最迟发生时间是以该事件为尾的弧的活动的最迟开始时间与该活动的持续时间的差

   D.关键活动一定位于关键路径上

【答案】C。一个事件的最迟发生时间等于 Min{以该事件为尾的弧的活动的最迟开始时间,最迟结束时间与该活动的持续时间的差}。

26.求下面的带权图的最小(代价)生成树时,可能是Kruskal 算法第2次选中但不是Prim算法(从V4开始)第2次选中的边是( ).

   A. (V1, V3)           B. (V1,V4)            C. (V2, V3)           D.(V3, V4)

【答案】C。从V4开始,Kruskal 算法选中的第一条边一定是权值最小的(V1, V4), B错误。由于V1和V4已经可达,含有V1和V4的权值为8的第二条边一定符合Prim算法,排除A、D。

27. 用DFS遍历一个无环有向图,并在DFS算法退栈返回时打印相应的顶点,则输出的顶点序列是( )。

   A.逆拓扑有序        B.拓扑有序          C.无序的                D.无法确定

【答案】A。设在图中有顶点vi,它有后继顶点vj,即存在边<vi,vj>。根据DFS的规则,vi入栈后, 必先遍历完其后继顶点后vi才会出栈,也就是说,vi会在vj之后出栈,在如题所指的过程中,vi在vj后打印。由于vi和vj具有任意性,可以从上面的规律看出,输出顶点的序列是逆拓扑有序序列。

28. 用有向无环图描述表达式(x+y)((x+y)/x),需要的顶点个数至少是( ).

   A.5            B. 6          C. 8         D.9

【答案】A。先将该表达式转换成有向二叉树,注意到该二叉树中有些顶点是重复的,为了节省存储空间,可以去除重复的顶点(使项点个数达到最少),将有向二叉树去重转换成有向无环图,如下图所示。

 29.已知无向图G如下所示,使用克鲁斯卡尔(Kruskal) 算法求图G的最小生成树,加到最小生成树中的边依次是( )。

    A. (b,f), (b, d), (a, e), (c,e), (b,e)             B. (b,f), (b,d), (b, e),(a, e),(c, e)

    C. (a, e), (b, e), (c, e), (b, d), (b,f)            D. (a,e), (c, e), (b, e),(b,f), (b, d)

【答案】A。Kruskal算法:按权值递增顺序依次选取n-1条边,并保证这n-1条边不构成回路。初始构造一个仅含n个顶点的森林;第一步,选取权值最小的边(b,f)加入最小生成树:第二步,剩余边中权值最小的边为(b, d),加入最小生成树,第二步操作后权值最小的边(d,f)不能选,因为会与之前已选取的边形成回路;接下来依次选取权值9、10、 11 对应的边加入最小生成树,此时6个项点形成了一棵树,最小生成树构造完成。按照上述过程,加到最小生成树的边依次为(b,f, (b, d), (a,e), (c, e), (b, e)。其生成过程如下所示。

 

 30.下图所示的AOE网表示一项包含8个活动的工程。活动d的最早开始时间和最迟开始时间分别是( )。

      A.3和7           B.12和12           C.12和14           D.15和15

【答案】C。活动d的最早开始时间等于该活动弧的起点所表示的事件的最早发生时间,活动d的最早开始时间等于事件2的最早发生时间max{a,b+c} = max{3,12}=12。活动d的最迟开始时间等于该活动弧的终点所表示的事件的最迟发生时间与该活动所需时间之差,先算出图中关键路径长度为27 (对于不复杂的选择题,找出所有路径计算长度),那么事件4的最迟发生时间为min{27-g}=min{27-6}=21,活动d的最迟开始时间为21-d=21-7=14。

常规方法:按照关键路径算法算得到下表。

从表中可知,活动d的最早开始时间和最迟开始时间分别为12和14。

二、判断题

 1. 在 n 个结点的无向图中,若边数大于 n-1,则该图必是连通图。( )

【答案】×。连通图边数大于n-1.而大于n-1不一定连通。例如下图中有5个顶点、5个边而此图不是连通图。

 2. 无向图的邻接矩阵可用一维数组存储。( )

【答案】√。

3. 一个有向图的邻接表和逆邻接表中结点的个数可能不等。( )

【答案】 ×。“逆邻接表”只是把“邻接表”中弧头和弧尾的次序换了,并不是一种新表,它和“邻接表”的唯一区别就是弧尾的nextarc指针指向弧头而已.所以节点数是相等的。

4. 带权的连通无向图的最小(代价)生成树(支撑树)是唯一的。( )

【答案】×。最小生成树在一些情况下可能会有多个。例如,当图的每一条边的权值都相同时,该图的所有生成树都是最小生成树。

5. 对一个 AOV 网,从源点到终点的路径最长的路径称作关键路径。 ( )

【答案】×。在一个 AOE网,从源点到终点的路径最长的路径称作关键路径。

6. 在表示某工程的 AOE 网中,加速其关键路径上的任意关键活动均可缩短整个工

程的完成时间。( )

【答案】×。任意活动延长,工期延长;任意缩短:所有都缩短才可,不能靠某个活动。

7. 哈希表的结点中只包含数据元素自身的信息,不包含任何指针。( )

【答案】×。拉链法中结点包含数据元素自身信息,也包含指针。

三、综合应用题

1.已知如图所示的无向网,请给出: ① 邻接矩阵; ② 邻接表; ③ 最小生成树。

【答案】

     ②

    ③

 2.有向网如图所示,试用 迪 杰 斯 特 拉 算 法 求 出 从 顶 点 a 到其他各顶点间的最短路径。

 【答案】

 3. 试对图中的 AOE网:

     ① 求这个工程最早可能在什么时间结束;

     ② 求每个活动的最早开始时间和最迟开始时间;

     ③ 确定哪些活动是关键活动。

 【答案】按拓扑有序的顺序计算各个顶点的最早可能开始时间 Ve 和最迟允许开始时间 Vl 。 然后再计算各个活动的最早可能开始时间 e 和最迟允许开始时间 l ,根据l-e是否为0 来确定关键活动,从而确定关键路径。

 

 4. 图G是一个非连通无向图,共有28条边,该图至少有多少个顶点?
【答案】由于图G是一个非连通无向图,在边数固定时,顶点数最少的情况是该图由两个连通子图构成,且其中之一只含一个顶点,另一个为完全图。其中只含一个顶点的子图没有边,另一个完全图的边数为n(n-1)/2=28,得n=8。所以该图至少有1+8=9个顶点。

 5. 图G=(y, E)以邻接表存储,如下图所示,试画出图G的深度优先生成树和广度优先生成树(假设从结点1开始遍历)。

 

 【答案】根据G的邻接表不难画出

      ①采用深度优先遍历。深度优先搜索总是尽可能“深”地搜索图,根据存储结构可知深度优先搜索的路径次序为(1, 2), (2, 3),(3, 4), (4, 5),深度优先生成树如图(b)所示。需要注意的是,当存储结构固定时,生成树的树形也就固定了,比如不能先搜索(1, 3)。

      ②采用广度优先遍历。广度优先搜索总是尽可能“广”地搜索图,一层一层地向外扩展,根据存储结构可知广"度优先搜索的路径次序为(1, 2), (1, 3), (1,4), (2,5),广度优先生成树,如图所示。

 6. 已知有向图如下图所示。

    ① 写出该图的邻接矩阵表示并据此给出从顶点1出发的深度优先遍历序列。
    ② 求该有向图的强连通分量的数目。.
    ③ 给出该图的任意两个拓扑序列。
    ④ 若将该图视为无向图,分别用Prim算法和Kruskal算法求最小生成树.

  【答案】

     ①该图的邻接矩阵得如图所示,到的深度优先遍历序列为1,2,3,5,7,4, 6. 

    ② 解题思路:当某个顶点只有出弧而没有入弧时,其他项点无法到达这个项点,不可能与其他顶点和边构成强连通分量(这个单独的顶点构成一个强连通分量)。

        a. 顶点1无入弧构成第一个强连通分量。 删除顶点1及所有以之为尾的弧。
        b. 顶点2无入弧构成一个强连通分量。删除顶点2及所有以之为尾的弧。

        c.  ……
       以此类推,最后得到每个顶点都是一一个强连通分量, 故强连通分量数目为7。
   ③ 该图的两个拓扑序列如下:
       a. 1,2,4,6,3,5, 7
       b. 1,4,2, 6,3,5, 7
   ④若视该图为无向图:
       用Prim算法生成最小生成树的过程如下:1-2,1-3, 3-6, 3-5, 5-7, 6-4 (图略)。
       用Kruskal算法生成最小生成树的过程如下图所示。

 7. 下图所示为一个用AOE网表示的工程。
   ① 画出此图的邻接表表示.
   ② 完成此工程至少需要多少时间?
   ③ 指出关键路径。
   ④ 哪些活动加速可以缩短完成工程所需的时间?

 【答案】

      ① 该图的邻接表表示如下所示:

       求关键路径的算法如下: 求关键路径的算法如下:
       a.输入e条弧<j,k>,建立AOE网的存储结构 ; 
       b.从源点v1出发,令ve(1)=0,求ve(j), 2≤j≤n ;
       c.从汇点vn出发,令vl(n)=ve(n),求vl(j),1≤i≤n-1;
       d.根据各顶点的ve和vl值,求每条弧s (活动)的最早开始时间e(s)和最晚开始时间l(s),其中e(s)=l(s)为关键活动。

      ②根据以上算法可以得到至少需要时间16;
      ③关键路径为(V1, V3, V5, V7, V9);
      ④活动a2, a6, a9, a12加速,可以缩短工程所需的时间。

...... ( B )3. 有8个结点的无向最多有 条边。 A.14 B. 28 C. 56 D. 112 ( C )4. 有8个结点的无向连通最少有 条边。 A.5 B. 6 C. 7 D. 8 ( C )5. 有8个结点的有向完全有 条边。 A.14 B. 28 C. 56 D. 112 ( B )6. 用邻接表表示进行广度优先遍历时,通常是采用 来实现算法的。 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) 。 ....... 1. 【严题集7.1①】已知如所示的有向,请给出该的: 每个顶点的入/出度; 邻接矩阵; 邻接表; 逆邻接表。 2. 【严题集7.7②】请对下的无向带权: 写出它的邻接矩阵,并按普里姆算法求其最小生成树; 写出它的邻接表,并按克鲁斯卡尔算法求其最小生成树。 ........ 五、算法设计题(每题10分,共30分) 1. 【严题集7.14③】编写算法,由依次输入的顶点数目、弧的数目、各顶点的信息和各条弧的信息建立有向的邻接表。 解:Status Build_AdjList(ALGraph &G) //输入有向的顶点数,边数,顶点信息和边的信息建立邻接表 { InitALGraph(G); scanf("%d",&v); if(v<0) return ERROR; //顶点数不能为负 G.vexnum=v; scanf("%d",&a); if(a<0) return ERROR; //边数不能为负 G.arcnum=a; for(m=0;m<v;m++) G.vertices[m].data=getchar(); //输入各顶点的符号 for(m=1;m<=a;m++) { t=getchar();h=getchar(); //t为弧尾,h为弧头 if((i=LocateVex(G,t))<0) return ERROR; if((j=LocateVex(G,h))nextarc;q=q->nextarc); q->nextarc=p; } p->adjvex=j;p->nextarc=NULL; }//while return OK; }//Build_AdjList 2. 【严题集7.15③】试在邻接矩阵存储结构上实现的基本操作:DeleteArc(G,v,w)。 (刘提示:删除所有从第i个顶点出发的边的方法是 将邻接矩阵的第i行全部置0 ) ........
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值