Chapter V: 图论
大量的组合问题都可以被归结为图论问题, “图” 这一组合结构可能是组合数学这一学科中研究得最为透彻的结构. 下面, 我们将对组合意义上的 “图” 做数学意义上抽象化定义, 并结合例子对一些重要概念进行介绍.
定义5.1 (图)
我们称由两个集合组成的集合对 G = ( V , E ) G= (V,E) G=(V,E) 为 图 (
graph
), 其中 V V V 为一个集合, E E E 是一个由 V V V 的二元子集为元素构成的集合. 我们分别称 V V V 和 E E E 为 G G G 的 顶点集 (vertex set
) 和 边集 (edge set
). 简单起见, 我们常用 x y xy xy 指代边 { x , y } \{x,y\} {x,y}.
[注]
- 显然, x y ∈ E ⇔ y x ∈ E xy \in E \Leftrightarrow yx \in E xy∈E⇔yx∈E.
-
x
y
∈
E
⇔
x
,
y
xy \in E \Leftrightarrow x,y
xy∈E⇔x,y 邻接(
adjacent
); 亦称 x , y x,y x,y 和 x y xy xy 关联 (incident
). -
u
v
,
u
x
∈
E
⇒
u
v
uv, ux \in E \Rightarrow uv
uv,ux∈E⇒uv 和
u
x
ux
ux 在
u
u
u 邻接 (
adjacent
), 邻接的边共用一个顶点. - E E E 中的元素 (点对) 互异, 且不包含由同一个点所组成的点对.
定义5.2 (邻接点集)
对于图 G G G 的每一个顶点 x x x, 我们用符号 N G ( x ) N_{G}(x) NG(x) 代表由一切与 x x x 邻接的顶点所组成的集合, 称其为 在图 G G G 中顶点 x x x 的邻接点集.
定义5.3 (度)
我们称 ∣ N G ( x ) ∣ |N_G(x)| ∣NG(x)∣ 为顶点 x x x 的 度 (
degree
), 代表和 x x x 邻接的顶点个数, 记为 d G ( x ) d_G(x) dG(x).
[例] (握手引理或度和引理)
对于任一个图
G
G
G, 下列等式成立:
∑
V
∈
V
(
G
)
d
G
(
V
)
=
2
∣
E
(
G
)
∣
\sum_{V\in V(G)}d_G(V) = 2|E(G)|
V∈V(G)∑dG(V)=2∣E(G)∣
[证明]
根据 “度” 的定义可知: 它等于和某个特定的点邻接的其余顶点个数. 故在计数时, 也可将其视为在某个特定点邻接的边的条数. 累加求和时, 计数恰好将图的所有边遍历两遍. 故可知原等式成立. ■ \blacksquare ■
[推论]
对任意图 G G G, 度数为奇数的顶点个数总是偶数.
[证明]
不妨假设 V 1 ⊂ V ( G ) V_{1} \subset V(G) V1⊂V(G) 为由一切度数为偶数的顶点所组成的顶点子集, 设 V 2 = V ( G ) \ V 1 V_2 = V(G) \backslash V_{1} V2=V(G)\V1. 下证 ∣ V 2 ∣ |V_2| ∣V2∣ 为偶数:
由度和引理:
2
∣
E
(
G
)
∣
=
∑
V
∈
V
(
G
)
d
G
(
V
)
=
∑
V
∈
V
1
d
G
(
V
)
+
∑
V
∈
V
2
d
G
(
V
)
.
2|E(G)| = \sum_{V \in V(G)}d_G(V) = \sum_{V \in V_1}d_G(V) + \sum_{V \in V_2}d_G(V).
2∣E(G)∣=V∈V(G)∑dG(V)=V∈V1∑dG(V)+V∈V2∑dG(V).
故有:
∑
V
∈
V
2
d
G
(
V
)
=
2
∣
E
(
G
)
∣
−
∑
V
∈
V
1
d
G
(
V
)
≡
0
m
o
d
2
\sum_{V \in V_2}d_G(V) = 2|E(G)| - \sum_{V \in V_1}d_G(V) \equiv 0 \mod 2
V∈V2∑dG(V)=2∣E(G)∣−V∈V1∑dG(V)≡0mod2
故
∣
V
∣
≡
0
m
o
d
2.
■
|V| \equiv 0 \mod 2. \blacksquare
∣V∣≡0mod2.■
下面, 我们介绍一些特殊的图:
定义5.4 (完全图)
若图 G G G 的任意一对不同的顶点都是邻接的, 称其为 完全图 (
complete graphs
), 记为 K l K_l Kl, l l l 为图的顶点数. 显然, E ( K l ) = ( n 2 ) . E(K_l) = \binom n2. E(Kl)=(2n).
定义5.5 (路)
若图 G G G 的顶点可被按照某种顺序排序, 且只有序列中相邻的两个顶点才是邻接的, 则称 G G G 为 路 (
path
).
通常, 记具有 n n n 个顶点的路为 P n P_n Pn. 其边长为 n − 1 n-1 n−1.
定义5.6 (圈)
若图 G G G 的顶点可按照一循环顺序排序, 且当且仅当序列中相邻的两个顶点才是邻接的, 则称 G G G 为 圈 (
cycle
).
通常, 记具有 n n n 个顶点的圈为 C n C_n Cn. 其边长为 n n n.
定义5.7 (二部图)
如果 G G G 的顶点 V V V 可分割为两个互不相交的子集 ( A , B ) (A,B) (A,B),并且图中的每条边 ( i , j ) (i,j) (i,j) 所关联的两个顶点 i i i 和 j j j 分别属于这两个不同的顶点集,则称图 G G G 为一个 二分图, 亦称为 二部图 (
Bipartite Graph
).
定义5.8 (顶点分布)
若一个二部图 G G G 的顶点集可被分为 X X X 和 Y Y Y, 使得 G G G 中每一条边的顶点分别分布在 X X X 和 Y Y Y 中, 则我们称 X X X 和 Y Y Y 为 图 G G G 的 顶点分布 (
partite set
).
[注]
- 每一条单独的边都是一个二部图, 每一个长为偶数的圈也是一个二部图.
- 长为奇数的圈不是二部图.
- 我们称一个圈为 “奇圈” 或 “偶圈”, 若其长度为奇数或偶数.
下面介绍两种可行的, 对图的操作.
设图
G
G
G,
v
,
e
v,e
v,e 分别为图的一个顶点和一条边. 我们称:
(
V
(
G
)
\
{
v
}
,
E
(
G
)
\
{
u
v
:
u
v
∈
E
(
G
)
}
)
(V(G)\backslash \{v\}, E(G)\backslash \{uv: uv \in E(G)\})
(V(G)\{v},E(G)\{uv:uv∈E(G)})
为由图
G
G
G 删去顶点
v
v
v 所得到的图, 记为
G
−
v
G-v
G−v.
我们称:
(
V
(
G
)
\
{
v
}
,
E
(
G
)
\
{
e
}
)
(V(G)\backslash \{v\}, E(G)\backslash \{e\})
(V(G)\{v},E(G)\{e})
为由图
G
G
G 删去边
e
e
e 所得到的图, 记为
G
−
e
G-e
G−e.
[注]
当我们从图中删去一个顶点时, 所有和该顶点关联的边都要被一同删去!
定义5.9 (子图)
设 G G G 是一个图. 所有由 G G G 删去顶点或边而得到的新图被称为 G G G 的子图 (
subgraph of G
).
[注]
- G G G 是其本身的子图.
- 设
H
H
H 为
G
G
G 的子图. 若
V
(
H
)
=
V
(
G
)
V(H) = V(G)
V(H)=V(G), 称
H
H
H 为
G
G
G 的 生成子图 (
spanning subgraph
). - 设
H
H
H 为
G
G
G 的子图. 若
H
H
H 中所有边都和
V
(
H
)
V(H)
V(H) 中的两个顶点相关联, 则称
H
H
H 为
G
G
G 的诱导子图 (
induced subgraph
). - 我们可以通过 “删除 G G G 的某个顶点时仅删除与该顶点相关联的所有边” 的方式得到诱导子图.
定义5.10 (无圈图)
若 G G G 的子图中没有任何一个是圈, 则称其为一个 无圈图 (
Acylic graph
).
定义5.11 (连通图)
若任取图 G G G 的一对顶点 u , v u,v u,v, 均存在一条始于 u u u, 终于 v v v 的路, 则称 G G G 为 连通图 (
connected graph
).
定义5.12 (树)
我们称连通的无圈图为 树.
[注]
若
G
G
G 的子图
T
T
T 为树, 我们称其为
G
G
G 的生成树 (spanning tree
).
T
T
T 同样也是
G
G
G 的生成子图.
[例]
设 G G G 为连通图. 设 C C C 为 G G G 的一个子圈, e e e 为 C C C 的一条边. 求证: G − e G-e G−e 仍为连通图.
[证明]
设 e e e 和 u , v u,v u,v 关联. 对于 G G G 中的每一条路, 它们或经过 e e e, 或不经过 e e e.
对于所有原来不经过 e e e 的路: 从 G G G 中删去 e e e 后它们的连通性显然不变.
对于所有原来需经过 e e e 的路: 由圈的结构知: 删去 e e e 后的环在连通性上和 e e e 等价. 故它们的连通性也不受影响.
综上: G − e G-e G−e 仍为一个连通图. ■ \blacksquare ■
定理5.1
若对于图 G G G 的任何一个顶点 v v v, 均有 d G ( v ) ⩾ 2 d_G(v) \geqslant 2 dG(v)⩾2, 则 G G G 中必存在一个长度不小于 min { d G ( v ) : v ∈ V ( G ) + 1 } = δ ( G ) + 1 \min\{d_G(v): v \in V(G) + 1\} = \delta(G) + 1 min{dG(v):v∈V(G)+1}=δ(G)+1 的圈.
[注]
方便起见, 我们作如下约定:
G G G 中顶点的最小度数: δ ( G ) = min { d G ( v ) : v ∈ V ( G ) } \delta(G) = \min\{d_G(v): v \in V(G)\} δ(G)=min{dG(v):v∈V(G)}
G G G 中顶点的最大度数: Δ ( G ) = max { d G ( v ) : v ∈ V ( G ) } \Delta(G) = \max\{d_G(v): v \in V(G)\} Δ(G)=max{dG(v):v∈V(G)}
故以上定理可改写成以下形式:
任何一个最小度数不少于 2 2 2 的图 G G G 都存在一个长度不小于 δ ( G ) \delta(G) δ(G) 的圈作为子图.
[证明]
设
P
P
P 为
G
G
G 的一个子图, 也是
G
G
G 中长度最大的路. 设
P
=
v
1
v
2
⋯
v
l
.
P = v_1v_2\cdots v_l.
P=v1v2⋯vl.
故
N
G
(
v
1
)
⊂
V
(
P
)
,
N
G
(
v
l
)
⊂
V
(
P
)
.
N_G(v_1) \subset V(P), ~~~ N_G(v_l) \subset V(P).
NG(v1)⊂V(P), NG(vl)⊂V(P).
否则, 我们可以在
G
G
G 中找到一条长为
l
l
l 的路, 这和假设相矛盾. (
E
(
P
)
=
l
−
1
E(P) = l-1
E(P)=l−1)
因
d
G
(
v
)
⩾
2
d_G(v) \geqslant 2
dG(v)⩾2,
v
1
v_{1}
v1 在
P
P
P 中有不止一个邻居. 不妨假设
r
r
r 为满足
v
1
v
r
∈
E
(
G
)
v_1v_r \in E(G)
v1vr∈E(G) 的最大整数. 因此,
r
⩾
d
G
(
v
)
+
1
r \geqslant d_G(v) + 1
r⩾dG(v)+1. 此时,
v
1
v
2
⋯
v
r
v
1
v_1v_2\cdots v_rv_1
v1v2⋯vrv1 即为 长为
r
r
r 的圈.
■
\blacksquare
■
[推论]
每一棵树中都存在一个度数不超过 1 1 1 的顶点.
定理 5.2
设 T T T 为树. 则满足 ∣ E ( T ) ∣ = ∣ V ( T ) ∣ − 1. |E(T)| = |V(T)| - 1. ∣E(T)∣=∣V(T)∣−1.
[证明]
下面是用数学归纳法证明:
首先, 容易验证 ∣ V ( T ) ∣ = 2 |V(T)| =2 ∣V(T)∣=2 时结论成立. 假设 ∣ V ( T ) ∣ ⩽ k − 1 |V(T)| \leqslant k-1 ∣V(T)∣⩽k−1 时结论仍成立.
考虑 ∣ V ( T ) ∣ = k |V(T)| = k ∣V(T)∣=k 的图:
设 x x x 为 T T T 中一个度数为 1 1 1 的顶点, T − x T-x T−x 仍为树. 且 ∣ V ( T − x ) ∣ = k − 1 |V(T-x)| = k-1 ∣V(T−x)∣=k−1.
此时有: ∣ E ( T ) ∣ = ∣ E ( T − x ) ∣ + 1 |E(T)| = |E(T-x)| + 1 ∣E(T)∣=∣E(T−x)∣+1. 由归纳假设知: ∣ E ( T ) ∣ = k − 1 = ∣ V ( T ) ∣ − 1 |E(T)| = k-1 = |V(T)|-1 ∣E(T)∣=k−1=∣V(T)∣−1. ■ \blacksquare ■
[例]
求证: 任一棵树均为一个二部图.
[证明]
(法1)
下面使用数学归纳法进行证明:
设
T
T
T 为树,
∣
E
(
T
)
∣
=
1.
|E(T)| = 1.
∣E(T)∣=1.
X
,
Y
⊂
V
(
T
)
,
X
∩
Y
=
∅
X,Y \subset V(T), X\cap Y = \empty
X,Y⊂V(T),X∩Y=∅.
将 T T T 的唯一一条边的两个顶点分别归于 X , Y X,Y X,Y , T T T 显然是一个二部图.
设 ∣ E ( T ) ∣ ⩽ k − 1 |E(T)| \leqslant k-1 ∣E(T)∣⩽k−1 时结论仍然成立:
∣ E ( T ) ∣ = k |E(T)| = k ∣E(T)∣=k 时: 设 x x x 为某一个度数为 1 1 1 的顶点. 可知: ∣ E ( T − x ) = k − 1 ∣ |E(T-x) = k-1| ∣E(T−x)=k−1∣. 由归纳假设知: T − x T-x T−x 是一个二部图.
将 x x x 归于与其邻接的顶点所属的不同的顶点集中, T T T 依然满足称为二部图的条件, 证毕. ■ \blacksquare ■
(法2)
沿用法1记号和规定. 我们采取以下的方法对
T
T
T 中的点进行归类:
将起始点归入 X X X 中, 向下遍历每一条边, 总是将边的两个顶点归于不同的集合中. 这样, 即得到了满足二部图判别条件的两个顶点子集. 若不然, 则总可找到一个圈, 这和 “树” 的定义矛盾. ■ \blacksquare ■
[例]
分别画出两个边数最大的完全二部图 K 6 . K 7 K_6.K_7 K6.K7.
[解]
设完全二部图的顶点集被分类为: { X , Y } \{X,Y\} {X,Y}.
由完全二部图定义可立即确定最大边数:
E M = max { m ( l − m ) } : m ∈ N + , m < l E_M = \max\{m(l-m)\}: m \in \mathbb{N^+}, m<l EM=max{m(l−m)}:m∈N+,m<l.
计算得出: E M ( K 6 ) = 9 , E M ( K 7 ) = 12 E_M(K_6) = 9, E_M(K_7) = 12 EM(K6)=9,EM(K7)=12.
并且可对应绘出图: 其中 ∣ X ∣ = m , ∣ Y ∣ = l − m |X| = m, |Y| = l-m ∣X∣=m,∣Y∣=l−m.
设 G G G 为图, X ⊂ V ( G ) X \subset V(G) X⊂V(G). 定义 ∂ ( X ) \partial(X) ∂(X) 为由所有和 X X X 以及 V ( G ) \ X V(G)\backslash X V(G)\X 中的各一个点关联的边组成的集合.
定理 5.3
当且仅当对于每个非空子集 X ⊂ V ( G ) , ∂ ( X ) ≠ ∅ X \subset V(G), \partial(X) \neq \empty X⊂V(G),∂(X)=∅, G G G 为一个连通图.
[证明]
⇒ \Rightarrow ⇒
设 G G G 为一个连通图. 则对图中任意一对顶点 x , y x,y x,y, 总能找到一条路, 以它们为首尾.
设 X X X 为 V ( G ) V(G) V(G) 的非空真子集. 从 X X X 和 V ( G ) V(G) V(G) 中分别选出 x , y x,y x,y. 则每条从 x x x 到 y y y 的路都有一条边, 这条边的两个顶点分别在 X X X 和 V ( G ) V(G) V(G) 中. 故 ∂ ( X ) ≠ ∅ \partial(X) \neq \empty ∂(X)=∅.
⇐ \Leftarrow ⇐
若 G G G 不是连通的, 则必存在至少一对顶点 x , y x,y x,y, G G G 中找不到一条连接它们的路.
设 X X X 为所有可通过某条路通向 x x x 的顶点的集合. 则 X ≠ ∅ , X ˉ ≠ ∅ X\neq \empty, \bar{X} \neq \empty X=∅,Xˉ=∅. 此时, 若 ∂ ( X ) ≠ ∅ \partial(X) \neq \empty ∂(X)=∅, 假设 u v ∈ ∂ ( X ) uv \in \partial(X) uv∈∂(X), 设 u ∈ X u \in X u∈X, 此时可知, 存在一条通路将 x , v x,v x,v 连接, 这和假设矛盾. 故 ∂ ( X ) = ∅ \partial(X) = \empty ∂(X)=∅, 证毕. ■ \blacksquare ■
定理 5.4
当且仅当图 G G G 有一棵生成树时, G G G 为连通图.
[证明]
⇒ \Rightarrow ⇒
设 T T T 为 G G G 的生成树. 由定义: T T T 是连通的. 对任一对顶点 x , y x,y x,y, 存在一条 x y − xy- xy−路. 这条路显然在 G G G 中.
⇐ \Leftarrow ⇐
下面给出从连通图 G G G 中找出生成树 T T T 的算法:
输入 = 连通图 G G G, x ∈ V ( G ) x \in V(G) x∈V(G)
输出 = V ( T ) , E ( T ) V(T), E(T) V(T),E(T)
Step 0
设 V ( T ) = { x } , E ( T = ∅ V(T) = \{x\}, E(T = \empty V(T)={x},E(T=∅, 初始化序列 S S S 仅包含 x x x, 对每个顶点 u u u, 设 P ( u ) = ∅ P(u) = \empty P(u)=∅.
Step 1
若 S = ∅ S = \empty S=∅, 直接输出 V ( T ) , E ( T ) V(T), E(T) V(T),E(T). 否则随机选取 r r r 作为序列 S S S 的开头.
Step 2
若
N
G
(
r
)
⊂
V
(
T
)
N_G(r) \subset V(T)
NG(r)⊂V(T), 撤销操作, 跳转至 Step 1
. 若不然, 取
y
∈
N
G
(
r
)
\
V
(
T
)
y \in N_G(r) \backslash V(T)
y∈NG(r)\V(T).
赋值: V ( T ) = V ( T ) ∪ { y } , E ( T ) = E ( T ) ∪ { r y } , P ( y ) = r V(T) = V(T) \cup \{y\}, E(T) = E(T) \cup \{ry\}, P(y) = r V(T)=V(T)∪{y},E(T)=E(T)∪{ry},P(y)=r.
并且将 y y y 连接到序列 S S S 末端.
无限次循环 Step 2
直到程序满足退出条件. 此时即得到所要求的生成树.
下列陈述等价:
- G G G 为连通图.
- 对每一对顶点 x , y x,y x,y, G G G 中均存在一个 x y − xy- xy−路.
- 对每一个 V ( G ) V(G) V(G) 的非空真子集, ∂ ( X ) ≠ ∅ \partial(X) \neq \empty ∂(X)=∅.
- G G G 有一棵生成树.
若
G
G
G 为一个非连通图, 则
G
G
G 的每一个最大连通子图都称为
G
G
G 的一个分支 (component
).
显然, G G G 的每一个分支均为 G G G 的一个诱导子图. 若 G G G 是一个连通图, 则其分支就是它自身.
[例]
当且仅当
G
G
G 的每一个分支均为二部图时,
G
G
G 为一个二部图.
[证明]
利用引理: 二部图的子图均为二部图.
⇐
\Leftarrow
⇐
因二部图
G
G
G 的分支为
G
G
G 的子图, 由引理: 显见其分支均为二部图.
⇒
\Rightarrow
⇒
设
G
1
G_1
G1 为
G
G
G 的其中一个分支, 它是二部图. 设
G
\
G
1
=
V
1
+
G
1
′
G\backslash G_1 = V_1+ G'_1
G\G1=V1+G1′,
G
1
′
G'_1
G1′ 为所有
G
\
G
1
G\backslash G_1
G\G1 中孤立的连通图所组成的集合.
由定义知:
G
1
′
G'_1
G1′ 中每一个元素均为
G
G
G 的分支,
V
1
V_1
V1 为孤立点集.
由假设知:
G
G
G 所有的分支均为二部图, 且它们不是连通的.
设
V
(
G
1
)
=
X
1
∩
Y
1
,
G
1
′
=
{
G
1
′
,
G
2
′
,
⋯
,
G
k
′
}
,
V
(
G
i
′
)
=
X
i
′
∩
Y
i
,
i
=
1
,
2
,
⋯
,
k
.
V(G_1) = X_1\cap Y_1, G'_1 = \{G'_1, G'_2, \cdots,G'_k\}, V(G'_i) = X'_i \cap Y_i,~~~ i= 1,2,\cdots, k.
V(G1)=X1∩Y1,G1′={G1′,G2′,⋯,Gk′},V(Gi′)=Xi′∩Yi, i=1,2,⋯,k.取
X
=
X
1
∩
(
⋂
i
=
1
,
2
,
⋯
,
k
X
i
)
,
Y
=
Y
1
∩
V
1
∩
(
⋂
i
=
1
,
2
,
⋯
,
k
Y
i
)
X = X_1\cap (\bigcap_{i = 1,2,\cdots,k}X_i), ~~~ Y = Y_1\cap V_1 \cap (\bigcap_{i = 1,2,\cdots,k}Y_i)
X=X1∩(i=1,2,⋯,k⋂Xi), Y=Y1∩V1∩(i=1,2,⋯,k⋂Yi)且
X
∪
Y
=
V
(
G
)
.
X\cup Y = V(G).
X∪Y=V(G). 故找到了这样的顶点子集
X
,
Y
X, Y
X,Y, 使得
E
(
G
)
E(G)
E(G) 中任一条边的两个顶点分别位于
X
,
Y
X, Y
X,Y 中. 由定义知:
G
G
G 为一个二部图.
■
\blacksquare
■