图论:练习题及分步解答

免费的图论练习题,附图示、提示和完整详细解答。每次数值都不同,分三个难度:度与边, 欧拉通路与树, 最短路径与生成树。

免费练习题简单

一棵树有 12 个顶点。它有多少条边 |E|?

|V| = 12

精确答案:整数,不要四舍五入。

下一题 →
免费练习图论立即练习图论每天 5 道免费题目,无需绑定银行卡。

练习内容

  1. 简单度与边
  2. 中等欧拉通路与树
  3. 困难最短路径与生成树

如何求解图论问题

  1. 写出每个顶点的度数;所有度数之和等于边数的两倍。
  2. 对于欧拉问题,先检查图是否连通,再数一数奇度顶点的个数。
  3. 对于树,利用 n − 1 条边和握手引理。
  4. 对于迪杰斯特拉算法,保留一张暂定距离表,每一轮确定未确定顶点中距离最小的那个。
  5. 对于最小生成树,把边按权重排序,跳过每条会形成圈的边(克鲁斯卡尔算法),或者从一个起点出发扩展一棵树(普里姆算法)。

常见错误

  • 忘记把度数之和除以 2。
  • 没有检查连通性就说一个图是欧拉图。
  • 在迪杰斯特拉算法中,顶点的距离还不是最小时就把它确定下来。
  • 只取最轻的边而不检查是否形成圈。
  • 把 Kn 的哈密顿回路数算成 n!,而不是 (n − 1)!/2。

关键公式

握手引理
Σ deg(v) = 2|E|
完全图
|E(Kn)| = n(n − 1)/2, |E(Km,n)| = m·n
正则图
|E| = n·k/2
树与森林
|E| = n − 1, |E| = n − c
树的叶子
L = 2 + Σ (deg(v) − 2) over deg(v) ≥ 3
欧拉
回路:所有顶点度数为偶数; 通路:恰有 2 个奇度顶点
Kn 中的哈密顿回路
(n − 1)!/2
迪杰斯特拉更新
d(v) = min(d(v), d(u) + w(u, v))
长度为 L 的途径
(Mᴸ)ij

从零开始学习图论

学习本课之前: 集合、关系与函数

1顶点、边和度

图由顶点(点)和边(连接两个顶点的线)组成。简单图中没有环,也没有重边。

顶点的度是与它相连的边的条数。每条边有两个端点,所以它使每个端点的度加 1。由此得到握手引理:

Σ deg(v) = 2·|E|

两个推论:度数之和总是偶数,奇度顶点的个数也是偶数。

  • 完全图 Kn 把每一对顶点都连起来:有 n(n − 1)/2 条边。
  • 完全二部图 Km,n 把一侧的每个顶点与另一侧的每个顶点相连:有 m·n 条边。
  • n 个顶点的 k-正则图有 n·k/2 条边。

邻接矩阵在 i 与 j 相连时,在 (i, j) 处为 1。无向图的邻接矩阵是对称的,行和就是度数,而 Mᴸ 的 (i, j) 元素给出从 i 到 j 的长度为 L 的途径条数。

自测 一个图的度数为 3, 3, 2, 2, 2。它有多少条边?
  1. 10
  2. 12
  3. 5
  4. 6

答案: 6. 度数之和为 12,每条边被计了两次,所以有 12/2 = 6 条边。5 是顶点数。

2欧拉与哈密顿

欧拉回路恰好经过每条边一次并回到起点。欧拉通路恰好经过每条边一次,但可以在别处结束。对于连通图:

  • 所有度数都是偶数:存在欧拉回路;
  • 恰有两个奇度顶点:存在欧拉通路,从一个奇度顶点到另一个奇度顶点;
  • 奇度顶点多于两个:两者都不存在。

哈密顿回路恰好经过每个顶点一次。对它没有简单的度数判别法。Kn 中有 (n − 1)!/2 条不同的哈密顿回路:固定起点,把其余 n − 1 个顶点排序,再因两个方向而除以 2。

自测 一个连通图的度数为 2, 3, 4, 3, 2。它具有什么?
  1. 两者都没有
  2. 既有欧拉回路,也有不是回路的欧拉通路
  3. 有欧拉回路
  4. 有欧拉通路,但没有欧拉回路

答案: 有欧拉通路,但没有欧拉回路. 恰有两个顶点的度为奇数(两个 3),所以它们之间存在欧拉通路,但没有回路。

3树

树是不含圈的连通图。n 个顶点的树恰有 n − 1 条边。添加任何一条边都会产生圈;去掉任何一条边都会使它不连通。

n 个顶点、c 棵树组成的森林有 n − c 条边。有 m 条边的连通图在去掉 m − n + 1 条边后保留一棵生成树。

握手引理可用来数叶子:Σ deg = 2(n − 1)。简便的写法是 L = 2 + Σ (d − 2),对度数 d ≥ 3 的顶点求和。有两个度为 3 的顶点、其余全为叶子的树有 2 + 1 + 1 = 4 片叶子。

4迪杰斯特拉算法与最小生成树

迪杰斯特拉算法在权重非负的图中求从起点出发的最短距离。

  1. 令起点的距离为 0,其他每个顶点的距离为 ∞。
  2. 确定距离最小的未确定顶点;它的距离现在是最终值。
  3. 对每个邻点 v,更新 d(v) = min(d(v), d(u) + w(u, v))。
  4. 重复上述过程,直到目标顶点被确定。

最小生成树以最小的总权重连接所有顶点。克鲁斯卡尔算法把边按权重从轻到重排序,每条边除非会形成圈都取下。普里姆算法从一个起点出发扩展一棵树,每次加入离开这棵树的最轻的边。两者都在取够 n − 1 条边后停止。

例题讲解

求下图中从 A 到 E 的最短距离。

1

起点

412581ABCDE

d(A) = 0。它的邻点得到 d(B) = 4 和 d(C) = 1。

2

确定 C (1)

经过 C:d(B) = min(4, 1 + 2) = 3,d(E) = 1 + 8 = 9。

3

确定 B (3)

经过 B:d(D) = 3 + 5 = 8。

4

确定 D (8)

经过 D:d(E) = min(9, 8 + 1) = 9。没有改进,两者相等。

5

确定 E (9)

E 已被确定:它的距离是最终值。

答案

最短距离为 d(E) = 9,沿路径 A → C → E。路径 A → C → B → D → E 的长度相同,1 + 2 + 5 + 1 = 9。

自测 克鲁斯卡尔算法已经取了权重为 1、2 和 3 的边。下一条最轻的边权重为 4,它连接的两个顶点已经连通。会发生什么?
  1. 它被取下,因为它是剩下的最轻的边
  2. 它被跳过,因为会形成圈
  3. 改为去掉权重为 3 的边
  4. 算法停止

答案: 它被跳过,因为会形成圈. 克鲁斯卡尔算法从不形成圈:同一连通分量内两个顶点之间的边会被跳过,算法继续处理下一条边。

5常见错误

  • 忘记把度数之和除以 2 来得到边数。
  • 没有检查图是否连通就判断是否有欧拉回路。
  • 在迪杰斯特拉算法中,顶点的暂定距离还不是最小时就把它确定下来。
  • 不检查圈就取最轻的 n − 1 条边。
  • 把 Kn 的哈密顿回路数算成 n!,而不是 (n − 1)!/2。

6考试题是什么样的

  • 简单:度与边。你要使用握手引理,数出 Kn、Km,n、正则图和树的边数,读懂邻接矩阵,或点选具有给定度数的顶点。
  • 中等:欧拉通路与树。你要判断一个图是否有欧拉回路或通路,数出树的叶子数,数出为得到生成树需要去掉的边数,或数出 Kn 中的哈密顿回路数。
  • 困难:最短路径与生成树。你要运行迪杰斯特拉算法,找出某一轮中被确定的顶点,求最小生成树的权重,点选克鲁斯卡尔或普里姆算法下一步加入的边,或用邻接矩阵数途径条数。

在应用中一步一步地学在应用中一步一步地学

例题详解

例题 1简单
AABBCCDDEE0010000001100010000101110

图中给出了一个简单无向图的邻接矩阵。该图有多少条边 |E|?

求: |E|

显示提示
  1. 当顶点 i 和 j 之间有边相连时,元素 (i, j) 为 1。
  2. 每条边 {i, j} 给出两个 1:一个在 (i, j),一个在 (j, i)。
  3. 矩阵中有 8 个 1。
显示答案和分步解答

度:顶点的度是与它相连的边的条数。每条边有两个端点,所以度数之和等于边数的两倍:Σ deg(v) = 2|E|(握手引理)。因此奇度顶点的个数是偶数。Kn 有 n(n − 1)/2 条边,n 个顶点的 k-正则图有 nk/2 条边,n 个顶点的树有 n − 1 条边。

数 1 位

各行之和: 1 + 1 + 2 + 1 + 3 = 8
|E| = 8/2 = 4

答案

|E| = 4
例题 2中等
ABCDEFG欧拉回路有欧拉通路,无回路都不是

这个连通图有欧拉回路、有不是回路的欧拉通路,还是两者都没有?点选你的答案。

|V| = 7|E| = 10
  1. 1欧拉回路
  2. 2有欧拉通路,无回路
  3. 3都不是
显示提示
  1. 欧拉定理只需要各顶点的度数(图是连通的)。
  2. 所有度数为偶数:有欧拉回路。恰有两个奇度顶点:有两者之间的欧拉通路。更多:两者都没有。
  3. 数出奇度顶点的个数。
显示答案和解析

欧拉、哈密顿与树:连通图在每个顶点度数都为偶数时有欧拉回路(每条边经过一次,回到起点),在恰有两个顶点度数为奇数时有不是回路的欧拉通路;此时通路从一个奇度顶点走到另一个奇度顶点。哈密顿回路恰好经过每个顶点一次;Kn 有 (n − 1)!/2 条。n 个顶点的树有 n − 1 条边,有 m 条边的连通图在去掉 m − n + 1 条边后保留一棵生成树。

度

deg(A) = 1, deg(B) = 4, deg(C) = 2, deg(D) = 4, deg(E) = 4, deg(F) = 2, deg(G) = 3

奇度顶点

A, G → 2
有欧拉通路,无回路

答案

有欧拉通路,无回路

欧拉通路从一个奇度顶点出发,在另一个奇度顶点结束。

例题 3困难
ABCDEF

长度为 3 且起点和终点都是 E 的闭途径有多少条?途径可以重复顶点和边。把这个数记作 N。

M = 邻接矩阵L = 3

求: N

显示提示
  1. 用邻接矩阵 M,从 i 到 j 的长度为 L 的途径条数是 Mᴸ 的元素 (i, j)。
  2. 先数出从 E 到每个顶点的长度为 2 的途径,再多走一步。
  3. 从 E 出发的长度为 2 的途径:A: 2, B: 1, C: 0, D: 2, E: 4, F: 1。
显示答案和分步解答

度:顶点的度是与它相连的边的条数。每条边有两个端点,所以度数之和等于边数的两倍:Σ deg(v) = 2|E|(握手引理)。因此奇度顶点的个数是偶数。Kn 有 n(n − 1)/2 条边,n 个顶点的 k-正则图有 nk/2 条边,n 个顶点的树有 n − 1 条边。

邻接矩阵

A: 0 1 1 0 0 0
B: 1 0 0 1 1 0
C: 1 0 0 0 1 0
D: 0 1 0 0 1 1
E: 0 1 1 1 0 1
F: 0 0 0 1 1 0

再走一步

(M³)EE = 2·0 + 1·1 + 0·1 + 2·1 + 4·0 + 1·1 = 4

答案

N = 4

问与答

什么是图论?

顶点的度是与它相连的边的条数。每条边有两个端点,所以它使每个端点的度加 1。由此得到握手引理:

两个推论:度数之和总是偶数,奇度顶点的个数也是偶数。

图论题目如何一步步求解?
  1. 写出每个顶点的度数;所有度数之和等于边数的两倍。
  2. 对于欧拉问题,先检查图是否连通,再数一数奇度顶点的个数。
  3. 对于树,利用 n − 1 条边和握手引理。
  4. 对于迪杰斯特拉算法,保留一张暂定距离表,每一轮确定未确定顶点中距离最小的那个。
  5. 对于最小生成树,把边按权重排序,跳过每条会形成圈的边(克鲁斯卡尔算法),或者从一个起点出发扩展一棵树(普里姆算法)。
图论有哪些常见错误?
  • 忘记把度数之和除以 2。
  • 没有检查连通性就说一个图是欧拉图。
  • 在迪杰斯特拉算法中,顶点的距离还不是最小时就把它确定下来。
  • 只取最轻的边而不检查是否形成圈。
  • 把 Kn 的哈密顿回路数算成 n!,而不是 (n − 1)!/2。
图论练习包括哪些内容?
  • 简单: 度与边
  • 中等: 欧拉通路与树
  • 困难: 最短路径与生成树

每道题的数值都不同,让你掌握方法,而不是记住答案。 卡住了?先打开一个小提示,需要时再查看完整解析。

练习方式

  • 每道题的数值都不同,让你掌握方法,而不是记住答案。
  • 卡住了?先打开一个小提示,需要时再查看完整解析。
  • 你的进度、错题和收藏的题目都会保留,方便考前复习。

本主题的前后主题

先学习

包含此主题的课程

数学与统计中的更多主题

可打印练习卷

免费练习图论立即练习图论每天 5 道免费题目,无需绑定银行卡。