跳转至

第五章图

答案速对

1 2 3 4 5 6 7 8 9 10
A C B D C B C D D D
11 12 13 14 15 16 17 18 19 20
A A C A C B C B B C
21 22 23 24 25 26 27 28 29 30
C D B D A B C C B B

(一)图的基本概念

  1. 【2009-07】下列关于无向连通图特性的叙述中,正确的是( )。

I. 所有顶点的度之和为偶数

II. 边数大于顶点个数减1

III. 至少有一个顶点的度为1

A. 只有I

B. 只有II

C. I和II

D. I和III

解析

I 正确。无向图中的每条边会分别给两个端点的度贡献 1,因此所有顶点度数之和为公式一定是偶数。这就是握手定理。

II 错误。含 n 个顶点的无向连通图至少有 公式 条边,树恰好达到这个下界。因此正确关系是公式不一定严格大于。

III 错误。无向连通图不一定存在度为 1 的顶点。例如一个环中每个顶点的度都是 2。只有含至少两个顶点的树才一定有度为 1 的顶点。

答案:A


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

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

解析

这不是问“构造一个连通图最少需要几条边”,而是问“边任意分布时仍能保证连通”。

先求 7 个顶点的不连通简单图最多能有多少条边。

要让不连通图的边尽可能多,应让一个连通分量包含 6 个顶点并构成完全图,剩余 1 个顶点孤立。此时边数为公式

所以有 15 条边时仍可能出现“公式 加一个孤立顶点”,不能保证连通。

再增加一条边后,边数达到 16。任何不连通图都无法拥有这么多边,因此一定连通。

答案:C

  1. 【2017-07】已知无向图G含有16条边,其中度为4的顶点个数为3,度为3的顶点个数为4,其他顶点的度均小于3。图G所含的顶点个数至少是( )。

A. 10

B. 11

C. 13

D. 15

解析

所有顶点度数之和为公式

已知顶点贡献的度数为公式

其余顶点还需贡献公式度。

题目说明其他顶点的度均小于 3,所以每个这样的顶点最多为 2 度。要用尽量少的顶点贡献 8 度,至少需要公式个顶点。

因此顶点总数至少为公式

相应的度数序列可以构造成简单无向图,因此这个下界能够达到。

答案:B

  1. 【2022-06】对于无向图 G=(V,E) ,下列选项中正确的是( )。

A. 当 |V|>|E| 时, G 一定是连通的

B. 当 |V|<|E| , G 一定是连通的

C. 当 |V|=|E|−1 , G 一定是不连通的

D. 当 |V|>|E|+1 , G 一定是不连通的

解析

含 公式 个顶点的无向连通图至少需要公式条边。

D 的条件公式等价于公式

边数低于连通图的最低要求,所以 G 一定不连通。

A 错误。公式 只说明 公式;当恰好等于 公式 时,图可能是一棵树而连通,也可能因边分布不当而不连通。

B 错误。边数较多仍可能集中在某个分量内,留下孤立顶点。

C 错误。该条件等价于 公式,图既可能连通,也可能不连通。

答案:D

(二)图的存储及基本操作

Tip

  1. 邻接矩阵
  2. 邻接表
  3. 邻接多重表、十字链表
  1. 【2013-07】设图的邻接矩阵 A 如下所示。各顶点的度依次是( )。

\(A=\begin{pmatrix} 0& 1& 0& 1\\ 0& 0& 1& 1\\ 0& 1& 0& 0\\ 1& 0& 0& 0 \end{pmatrix}\)

A. 1, 2, 1, 2

B. 2, 2, 1, 1

C. 3, 4, 2, 3

D. 4, 4, 2, 2

解析

矩阵不对称,所以表示的是有向图。

对有向图:

  • 第 i 行元素之和是顶点 i 的出度;
  • 第 i 列元素之和是顶点 i 的入度;
  • 顶点的度等于入度与出度之和。

逐个计算:

  • 顶点 1:出度 2,入度 1,总度数 3;
  • 顶点 2:出度 2,入度 2,总度数 4;
  • 顶点 3:出度 1,入度 1,总度数 2;
  • 顶点 4:出度 1,入度 2,总度数 3。

所以各顶点度数为 3、4、2、3。

答案:C

  1. 【2024-04】若无向图 G=(V,E) 的邻接多重表如下图所示,则 G 中顶点 b 与 d 的度分别是

1783066142155-223d2bfc-b83a-4249-881f-ae1d6e328da8.png

A. 0, 2

B. 2, 4

C. 2, 5

D. 3, 4

解析

题图与 b 关联的边为公式所以 公式。

与 d 关联的边为公式所以 公式。

答案:B

(三)图的遍历

Tip

  1. 深度优先搜索
  2. 广度优先搜索
  1. 【2012-05】对有 n 个结点、e 条边且使用邻接表存储的有向图进行广度优先遍历,其算法时间复杂度是( )。

A. O(n)

B. O(e)

C. O(n+e)

D. O(ne)

解析

广度优先遍历需要:

  1. 每个顶点至多入队、出队一次,耗时 公式;
  2. 扫描每个顶点的邻接表。有向图的所有邻接表结点总数等于弧数 e,因此耗时 公式。

合计为公式

答案:C

  1. 【2013-08】若对如下无向图进行遍历,则下列选项中,不是广度优先遍历序列的是( )。

1783066199060-e9b2ffad-8778-42ef-81f8-320801a547cc.png

A. h, c, a, b, d, e, g, f

B. e, a, f, g, b, h, c, d

C. d, b, c, a, h, e, f, g

D. a, b, c, d, h, e, f, g

解析

BFS 的关键性质是:先访问距离起点为 1 的所有顶点,再访问距离为 2 的顶点。

A 从 h 开始。h 的邻接点可按 c、a 入队,随后依次扩展出 b、d、e,再由 e 扩展 g、f,可以实现。

B 从 e 开始。e 的邻接点可按 a、f、g 入队;处理 a 时再发现 b、h,之后发现 c、d,可以实现。

C 从 d 开始。d 的邻接点可按 b、c 入队,随后依次发现 a、h、e、f、g,可以实现。

D 从 a 开始。a 的直接邻接点是 b、e、h,它们都属于第 1 层;c、d 属于更后面的层。序列却在访问 b 后立即访问 c、d,把第 2 层顶点放在尚未访问的 e、h 之前,违反 BFS 分层次序。

答案:D

  1. 【2015-05】设有向图 G=(V,E) ,顶点集 V={V0,V1,V2,V3} ,边集 E={(V0,V1),(V0,V2),(V0,V3),(V1,V3)} 。若从顶点 V0 开始对图进行深度优先遍历,则可能得到的不同遍历序列个数是( )。

A. 2

B. 3

C. 4

D. 5

解析

结果取决于 公式 邻接点的选择顺序。

以 公式 开始:公式

以 公式 开始时,剩余顶点可以先访问 公式 或 公式:公式公式

以 公式 开始时,剩余 公式 的先后顺序可以互换:公式公式

共 5 种不同 DFS 序列。

答案:D

  1. 【2016-06】下列选项中,不是下图深度优先搜索序列的是( )。

1783066309579-eaa4c436-4a7e-4638-8965-5e5442ff9248.png

A. V1,V5,V4,V3,V2

B. V1,V3,V2,V5,V4

C. V1,V2,V5,V4,V3

D. V1,V2,V3,V4,V5

解析

A 可以实现:从 公式 先进入 公式,再沿 公式 深入。

B 可以实现:从 公式 先进入 公式,再沿 公式 深入。

C 可以实现:从 公式 先进入 公式,再沿 公式 深入。

D 不可能。访问 公式 后,公式 有未访问的后继 公式,DFS 必须立即递归进入 公式,不能返回 公式 去访问 公式。因此序列不可能是 公式。

答案:D

(四)图的基本应用

  1. 【2019-06】用有向无环图描述表达式 (x+y)((x+y)/x) ,需要的顶点个数至少是( )。

A. 5

B. 6

C. 8

D. 9

解析

有向无环图可以让相同的子表达式共用同一个结点,而不必重复建立。

需要的结点为:

  1. 操作数 x;
  2. 操作数 y;
  3. 加法结点 公式,两次出现可以共用;
  4. 除法结点 公式;
  5. 最后的乘法结点。

题图

所以最少需要 5 个顶点。

答案:A

最小(代价)生成树

  1. 【2012-08】下列关于最小生成树的叙述中,正确的是( )。

I. 最小生成树的代价唯一

II. 所有权值最小的边一定会出现在所有的最小生成树中

III. 使用普里姆(Prim)算法从不同顶点开始得到的最小生成树一定相同

IV. 使用普里姆算法和克鲁斯卡尔(Kruskal)算法得到的最小生成树总不同

A. 仅I

B. 仅II

C. 仅I、III

D. 仅II、IV

解析

I 正确。一个图即使有多棵不同的最小生成树,它们的边集可以不同,但总代价都等于同一个最小值,因此最小代价唯一。

II 错误。如果若干条同为最小权值的边构成环,为避免生成树出现环,不可能把它们全部选入。某一条最小权边未必出现在所有最小生成树中。

III 错误。当最小生成树不唯一时,Prim 的起点以及权值相同时的选边次序都可能影响最终边集。

IV 错误。两个算法都用于求最小生成树,完全可能得到同一棵最小生成树;当最小生成树唯一时,它们必然得到同一边集。

答案:A

  1. 【2015-06】求下面带权图的最小(代价)生成树时,可能是克鲁斯卡尔(Kruskal)算法第2次选中但不是普里姆(Prim)算法(从 V4 开始)第2次选中的边是( )。

1783066565086-aa495f11-077e-4993-9a1f-6766af64de73.png

A. (V1,V3)

B. (V1,V4)

C. (V2,V3)

D. (V3,V4)

解析

Kruskal 按边权从小到大选择:

  1. 第 1 条一定是权值 5 的 公式;
  2. 接下来有三条权值同为 8 的边,公式、公式、公式 都可能在不同的同权排序下成为第 2 条。

Prim 从 公式 开始:

  1. 第 1 条也是 公式,当前树内顶点为 公式;
  2. 第 2 条必须跨越“树内—树外”边界。权值最小的候选为 公式 和 公式,均为 8。

边 公式 的两个端点此时都在树外,所以不可能成为 Prim 的第 2 条边;但它可以成为 Kruskal 的第 2 条边。

答案:C

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

1783068334498-d41e8aba-49f0-4091-9073-1005ec8f9c31.png

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

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

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

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

解析

按权值从小到大检查:

  1. 公式,权值 5,加入;
  2. 公式,权值 6,加入;
  3. 公式,权值 7。b、d、f 已经连通,加入该边会形成环,因此跳过;
  4. 公式,权值 9,加入;
  5. 公式,权值 10,加入;
  6. 公式,权值 11,将分量 公式 与 公式 连接,加入。

已经选中 5 条边,恰好达到 6 个顶点生成树所需的 公式 条边。

答案:A

最短路径

  1. 【2012-07】对如下有向图带权图,若采用迪杰斯特拉(Dijkstra)算法求从源点a到其他各顶点的最短路径,则得到的第一条最短路径的目标顶点是b,第二条最短路径的目标顶点是c,后续得到的其余最短路径的目标顶点依次是( )。

1783066402102-2fc21a32-bbed-4959-be74-3ac20073131c.png

A. d, e, f

B. e, d, f

C. f, d, e

D. f, e, d

解析

从 a 开始:

  1. 初始距离为 公式,所以先确定 b。
  2. 经 b 松弛后,公式,公式,所以第二个确定 c。
  3. 经 c 松弛后:
    • 公式;
    • 公式;
    • 公式。
      因此第三个确定 f。
  1. 接着确定距离为 5 的 d。经 d 松弛后,公式。
  2. 最后确定 e。

后续次序为 f、d、e。

题图

答案:C

  1. 【2016-08】使用迪杰斯特拉(Djkstra)算法求下图中从顶点 1 到其他各顶点的最短路径,依次得到的各最短路径的目标顶点是( )。

1783068269063-d67a6bbd-f3f6-4403-b498-81a6db4bd3c1.png

A. 5, 2, 3, 4, 6

B. 5, 2, 3, 6, 4

C. 5, 2, 4, 3, 6

D. 5, 2, 6, 3, 4

解析
  1. 初始 公式,先确定 5;
  2. 经 5 松弛,得到 公式,公式 仍为 5,所以确定 2;
  3. 经 2 松弛,公式,公式 仍为 11,所以确定 3;
  4. 当前未确定顶点中 公式 最小,确定 6;
  5. 最后确定 公式。

次序为公式

题图

答案:B

  1. 【2021-08】使用Dijkstra算法求下图中从顶点1到其余各顶点的最短路径,将当前找到的从顶点1到顶点2, 3, 4, 5的最短路径长度保存在数组dist中,求出第二条最短路径后,dist中的内容更新为 ( )。

1783068378324-360039e7-ff0c-4c20-826e-b2860d86c5c8.png

A. 26, 3, 14, 6

B. 25, 3, 14, 6

C. 21, 3, 14, 6

D. 15, 3, 14, 6

解析

初始化:公式

第一次确定距离最小的顶点 3,距离为 3。由 公式 松弛:公式

此时公式

第二次确定顶点 5,距离为 6。由 5 出发松弛:公式公式公式

所以第二条最短路径确定后:公式

答案:C

  1. 【2023-06】已知无向连通图 G 中各边的权值均为 1,下列算法中,一定能够求出图 G 中从某顶点到其余各顶点最短路径的是( )。

I. 普利姆(Prim)算法

II. 克鲁斯卡尔(Kruskal)算法

III. 图的广度优先搜索算法

A. 仅 I

B. 仅 III

C. 仅 I 和 II

D. I、II 和 III

解析

所有边权均为 1 时,路径长度就是路径所含边数。

BFS 从源点开始按层访问:

  • 第 1 层距离为 1;
  • 第 2 层距离为 2;
  • 依此类推。

因此 BFS 第一次发现某顶点时得到的就是最短路径,III 正确。

Prim 和 Kruskal 求的是最小生成树,其目标是使整棵生成树的边权总和最小,而不是保证生成树中从指定源点到每个顶点的路径最短。

即使所有边权都为 1,不同生成树总权值相同,但树内的源点到某顶点路径可能比原图最短路径更长。因此 I、II 均不保证单源最短路径。

答案:B

拓扑排序

  1. 【2010-08】对下图进行拓扑排序,可以得到不同拓扑序列的个数是( )。

1783066356791-931a2ffd-eaa3-4a78-8a22-9cad5cc768f1.png

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

解析

最初只有 a 的入度为 0,所以 a 必须排在第一位。

删除 a 及其出边后,b 和 e 的入度都变为 0:

  1. 若先选 b,则 c 和 e 都可选:
    • 选 c 后只能选 e,再选 d,得到 a、b、c、e、d;
    • 选 e 后再选 c、d,得到 a、b、e、c、d。
  1. 若先选 e,之后只有 b 可选,再依次为 c、d,得到 a、e、b、c、d。

一共 3 种不同拓扑序列。

答案:B

  1. 【2011-08】下列关于图的叙述中,正确的是( )。

Ⅰ. 回路是简单路径

Ⅱ. 存储稀疏图,用邻接矩阵比邻接表更省空间

Ⅲ. 若有向图中存在拓扑序列,则该图不存在回路

A.仅Ⅱ

B.仅Ⅰ、Ⅱ

C.仅Ⅲ

D.仅Ⅰ、Ⅲ

解析

详细解析:

I 错误。简单路径要求路径中的顶点不重复,而回路的起点和终点相同,至少重复了首尾顶点,因此不能直接说“回路是简单路径”。

II 错误。邻接矩阵无论边多少都需要 公式 空间;邻接表只需 公式 空间。稀疏图中 公式 远小于 公式,邻接表更省空间。

III 正确。存在拓扑序列等价于有向图是有向无环图。若存在有向回路,回路中的每个顶点都必须排在自己的前驱之后,无法形成线性拓扑次序。

答案:C

  1. 【2012-06】若用邻接矩阵存储有向图,矩阵中主对角线以下的元素均为零,则关于该图拓扑序列的结论是( )。

A. 存在,且唯一

B. 存在,且不唯一

C. 存在,可能不唯一

D. 无法确定是否存在

解析

按顶点编号 公式 理解邻接矩阵。主对角线以下元素为 0,说明若存在弧 公式,只能有公式

沿任何有向路径,顶点编号都会严格增大,因此不可能绕一圈回到原顶点,图中不存在有向环。

所以拓扑序列一定存在,编号自然顺序公式

就是一个拓扑序列。

但拓扑序列不一定唯一。如果某些顶点之间没有先后约束,它们可以交换位置。因此结论是“存在,可能不唯一”。

答案:C

  1. 【2014-07】对如下所示的有向图进行拓扑排序,得到的拓扑序列可能是( )。

1783066546423-72d127ab-0d30-4744-8cf4-21f0b5ce033c.png

A. 3, 1, 2, 4, 5, 6

B. 3, 1, 2, 4, 6, 5

C. 3, 1, 4, 2, 5, 6

D. 3, 1, 4, 2, 6, 5

解析

拓扑序列必须满足每条弧的起点在终点之前。

由 公式 可知 4 必须在 2 前,所以 A、B 中的“2、4”次序错误。

由 公式 可知 6 必须在 5 前,所以 C 中的“5、6”次序错误。

D 为 3、1、4、2、6、5:

  • 3 在 1、6 前;
  • 1 在 2、4 前;
  • 4 在 2、6 前;
  • 2、6 都在 5 前。

所有约束均满足。

答案:D

  1. 【2016-07】若将 n 个顶点 e 条弧的有向图采用邻接表存储,则拓扑排序算法的时间复杂度是( )。

A. O(n)

B. O(n+e)

C. O(n^2)

D. O(ne)

解析

以基于入度的拓扑排序为例:

  1. 初始化或检查每个顶点的入度,需要处理 n 个顶点;
  2. 每个顶点至多入栈或入队一次,共 公式;
  3. 删除一个顶点时扫描其邻接表,每条弧只被扫描一次,共 公式。

因此总时间复杂度为公式

答案:B

  1. 【2018-07】下列选项中,不是如下有向图的拓扑序列的是( )。

1783068284594-78bb53d7-0b63-4a68-83d5-a964bb8cb295.png

A. 1, 5, 2, 3, 6, 4

B. 5, 1, 2, 6, 3, 4

C. 5, 1, 2, 3, 6, 4

D. 5, 2, 1, 6, 3, 4

解析

A、B、C 都满足:

  • 1、5 在 2 之前;
  • 2 在 3、6 之前;
  • 3、6、5 在 4 之前。

D 的开头是 5、2、1。图中有弧公式

所以 1 必须排在 2 前。D 把 2 放在 1 前,违反拓扑约束。

答案:D

  1. 【2021-07】给定如下有向图,该图的拓扑有序序列的个数( )。

1783068359380-cd1c14d3-0718-4dc3-9e87-9d5a3bd5104e.png

A. 1

B. 2

C. 3

D. 4

解析

依次观察入度为 0 的顶点:

  1. 初始只有 A,第一位只能是 A;
  2. 删除 A 后只有 B 可选;
  3. 删除 B 后只有 C 可选;
  4. 删除 C 后只有 D 可选;
  5. 删除 D 后只有 E 可选;
  6. 最后才是 F。

每一步都只有一个可选顶点,所以拓扑序列唯一:公式

答案:A

  1. 【2020-06】修改递归方式实现图的深度优先搜索(DFS)算法,将输出(访问)顶点信息的语句移到退出递归前(即执行输出语句后立刻退出递归)。采用修改后的算法遍历有向无环图G,若输出结果中包含G中全部顶点,则输出的顶点序列是G的( )。

A. 拓扑有序序列

B. 逆拓扑有序序列

C. 广度优先搜索序列

D. 深度优先搜索序列

解析

修改后的 DFS 会先递归处理当前顶点的所有后继,最后才输出当前顶点。

若有弧公式当从 u 访问到 v 时,v 会在 u 之前完成并输出。因此输出序列中 v 位于 u 前面。

拓扑序列要求 u 位于 v 前面;当前输出恰好相反,所以是逆拓扑序列。

通常用 DFS 求拓扑排序时,也是按完成时间把顶点压栈,最后再把栈逆序弹出。题目直接按完成次序输出,所以得到逆拓扑次序。

答案:B

关键路径

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

1783066428975-546a4dc9-58cd-4330-8436-27db13dcd6ba.png

A. c 和 e

B. d 和 c

C. f 和 d

D. f 和 h

解析

计算从源点 1 到汇点 6 的最长路径,可得到三条长度均为 27 的关键路径:

公式

公式

公式

要缩短总工期,必须让所有关键路径都同时缩短。

  • A 加快 c、e,但第三条关键路径 公式 不受影响;
  • B 加快 d、c,但第三条关键路径不受影响;
  • C 加快 f、d:前两条关键路径都含 d,第三条含 f,因此三条都缩短;
  • D 加快 f、h,但第一条关键路径 公式 不受影响。

答案:C

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

1783068307589-fb013a73-ce85-4994-a5c0-0915562156ee.png

A. 3和7

B. 12和12

C. 12和14

D. 15和15

解析

活动 d 是弧 公式,持续时间为 7。

先正向计算事件最早发生时间:

公式

公式

公式

公式

公式

公式

所以活动 d 的最早开始时间为

公式

再反向计算:

公式

公式

活动 d 的最迟开始时间为

公式

答案:C

  1. 【2020-08】若采用AOE网估算工程进度,则下列叙述中正确的是( )。

A. 关键路径是从源点到汇点边数最多的一条路径

B. 关键路径是从源点到汇点路径长度最长的路径

C. 增加任一关键活动的时间不会延长工程的工期

D. 缩短任一关键活动的时间将会缩短工程的工期

解析

AOE 网中,路径长度是路径上各活动持续时间之和。工程完工时间由源点到汇点的最长路径决定,这条路径称为关键路径,所以 B 正确。

A 错误。关键路径比较的是持续时间之和,不是边的条数。

C 错误。关键活动位于至少一条关键路径上,增加其持续时间会使对应关键路径变长,从而延长工程工期。

D 错误。若 AOE 网存在多条关键路径,缩短只位于其中一条关键路径上的某个活动,其他关键路径仍可能保持原工期,所以总工期未必缩短。

答案:B

  1. 【2022-07】下图是有 10 个活动的AOE网,时间余量最大的活动是( )。

1783068411837-c78804b3-81d4-4d76-891b-ef889ae30364.png

A. c

B. g

C. h

D. j

解析

正向计算事件最早发生时间:

公式

公式

公式

公式

公式

反向计算事件最迟发生时间:

公式

公式

公式

公式

活动余量等于“最迟开始时间减最早开始时间”。

对四个候选活动:

  • c,公式,余量为 公式;
  • g,公式,余量为 公式;
  • h,公式,余量为 公式;
  • j,公式,余量为 公式。

最大余量是活动 g 的 6。

答案:B