图的着色
点着色
(讨论的是无自环无向图)
对无向图顶点着色,且相邻顶点不能同色。若 G 是 𝑘
- 可着色的,但不是 (𝑘 −1)
- 可着色的,则称 k 是 G 的色数,记为 𝜒(𝐺)
。
对任意图 G,有 𝜒(𝐺) ≤Δ(𝐺) +1
,其中 Δ(𝐺)
为最大度。
Brooks 定理
设连通图不是完全图也不是奇圈,则 𝜒(𝐺) ≤Δ(𝐺)
。
证明
证明
设 |𝑉(𝐺)| =𝑛
,考虑数学归纳法。
首先,𝑛 ≤3
时,命题显然成立。
接下来,假设对于 𝑛 −1
时的命题成立,下面我们要逐步强化命题。
不妨只考虑 Δ(𝐺)
- 正则图,因为对于非正则图来说,可以看作在正则图里删去一些边构成的,而这一过程并不会影响结论。
对于任意不是完全图也不是奇圈的正则图 G,任取其中一点 v,考虑子图 𝐻 :=𝐺 −𝑣
,由归纳假设知 𝜒(𝐻) ≤Δ(𝐻) =Δ(𝐺)
,接下来我们只需证明在 H 中插入 v 不会影响结论即可。
令 Δ :=Δ(𝐺)
,设 H 染的 Δ
种颜色分别为 𝑐1,𝑐2,…,𝑐Δ
,v 的 Δ
个邻接点为 𝑣1,𝑣1,…,𝑣Δ
。不妨假设 v 的这些邻接点颜色两两不同,否则命题得证。
接下来我们设所有在 H 中染成 𝑐𝑖
或 𝑐𝑗
的点以及它们之间的所有边构成子图 𝐻𝑖,𝑗
。不妨假设任意 2 个不同的点 𝑣𝑖
,𝑣𝑗
一定在 𝐻𝑖,𝑗
的同一个连通分量中,否则若在两个连通分量中的话,可以交换其中一个连通分量所有点的颜色,从而 𝑣𝑖
,𝑣𝑗
颜色相同。
这里的交换颜色指的是若图中只有两种颜色 a,b,那么把图中原来染成颜色 a 的点全部染成颜色 b,把图中原来染成颜色 b 的点全部染成颜色 a。
我们设上述连通分量为 𝐶𝑖,𝑗
,那么 𝐶𝑖,𝑗
一定只能是 𝑣𝑖
到 𝑣𝑗
的路。因为 𝑣𝑖
在 H 中的度为 Δ −1
,所以 𝑣𝑖
在 H 中的邻接点颜色一定两两不同,否则可以给 𝑣𝑖
染别的颜色,从而和 v 的其他邻接点颜色重复,所以 𝑣𝑖
在 𝐶𝑖,𝑗
中邻接点数量为 1,𝑣𝑗
同理。然后我们在 𝐶𝑖,𝑗
中取一条 𝑣𝑖
到 𝑣𝑗
的路,令其为 P,若 𝐶𝑖,𝑗 ≠𝑃
,那么我们沿着 P 顺次给路上的点染色,设遇到的第一个度数大于 2 的点为 u,注意到 u 的邻接点最多只用了 Δ −2
种颜色,所以 u 可以重新染色,从而使 𝑣𝑖
,𝑣𝑗
不连通。
然后我们不难发现,对任意 3 个不同的点 𝑣𝑖
,𝑣𝑗
,𝑣𝑘
,𝑉(𝐶𝑖,𝑗) ∩𝑉(𝐶𝑗,𝑘) ={𝑣𝑗}
。
到这里我们对命题的强化工作就已经做完了。
接下来就很简单。首先,如果 v 的邻接点两两相邻,那么命题得证。不妨设 𝑣1
,𝑣2
不相邻,在 𝐶1,2
中取 𝑣1
的邻接点 w,交换 𝐶1,3
中的颜色。得到的新图中,𝑤 ∈𝑉(𝐶1,2) ∩𝑉(𝐶2,3)
,矛盾。
至此命题证明完毕。
Welsh–Powell 算法
Welsh–Powell 算法是一种在 不限制最大着色数 时寻找着色方案的贪心算法。
对于无自环无向图 G,设 𝑉(𝐺) :={𝑣1,𝑣2,…,𝑣𝑛}
满足。
deg(𝑣𝑖) ≥deg(𝑣𝑖+1), ∀1 ≤𝑖 ≤𝑛 −1
按 Welsh–Powell 算法着色后的颜色数至多为 max𝑛𝑖=1min{deg(𝑣𝑖) +1,𝑖}
, 该算法的时间复杂度为 𝑂(𝑛max𝑛𝑖=1min{deg(𝑣𝑖)+1,𝑖}) =𝑂(𝑛2)
。
过程
- 将当前未着色的点按度数降序排列。
- 将第一个点染成一个未被使用的颜色。
- 顺次遍历接下来的点,若当前点和所有与第一个点颜色 相同 的点 不相邻,则将该点染成与第一个点相同的颜色。
- 若仍有未着色的点,则回到步骤 1, 否则结束。
示例如下:

(由 Graph Editor 生成)
我们先对点按度数降序排序,得:
次序 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
点的编号 |
4 |
5 |
0 |
2 |
9 |
1 |
3 |
6 |
10 |
12 |
7 |
8 |
11 |
度数 |
5 |
5 |
4 |
4 |
4 |
3 |
3 |
3 |
3 |
3 |
2 |
2 |
1 |
min{deg(𝑣𝑖) +1,𝑖} |
1 |
2 |
3 |
4 |
5 |
4 |
4 |
4 |
4 |
4 |
3 |
3 |
2 |
所以 Welsh–Powell 算法着色后的颜色数最多为 5。
另外因为该图有子图 𝐶3
, 所以色数一定大于等于 3。
-
第一次染色:

染 4 9 3 11
号点。
- 第二次染色:

染 5 2 6 7 8
号点。
- 第三次染色:

染 0 1 10 12
号点。
证明
证明
对于无自环无向图 G,设 𝑉(𝐺) :={𝑣1,𝑣2,…,𝑣𝑛}
满足
deg(𝑣𝑖) ≥deg(𝑣𝑖+1), ∀1 ≤𝑖 ≤𝑛 −1
令 𝑉0 =∅
, 我们取 𝑉(𝐺) ∖⋃𝑚−1𝑖=0𝑉𝑖
中的子集 𝑉𝑚
, 其中的元素满足
- 𝑣𝑘𝑚 ∈𝑉𝑚
, 其中 𝑘𝑚 =min{𝑘 :𝑣𝑘 ∉⋃𝑚−1𝑖=0𝑉𝑖}
-
若
{𝑣𝑖𝑚,1,𝑣𝑖𝑚,2,…,𝑣𝑖𝑚,𝑙𝑚} ⊂𝑉𝑚, 𝑖𝑚,1 <𝑖𝑚,2 <⋯ <𝑖𝑚,𝑙𝑚
则 𝑣𝑗 ∈𝑉𝑚
当且仅当
- 𝑗 >𝑖𝑚,𝑙𝑚

- 𝑣𝑗
与 𝑣𝑖𝑚,1,𝑣𝑖𝑚,2,…,𝑣𝑖𝑚,𝑙𝑚
均不相邻
显然若将 𝑉𝑖
中的点染成第 i 种颜色,则该染色方案即为 Welsh–Powell 算法给出的方案,显然有
- 𝑉1 ≠∅

- 𝑉𝑖 ∩𝑉𝑗 =∅ ⟺ 𝑖 ≠𝑗

- ∃𝛼(𝐺) ∈ℕ∗,∀𝑖 >𝛼(𝐺), 𝑠.𝑡. 𝑉𝑖 =∅

我们只需要证明:
⋃𝛼(𝐺)𝑖=1𝑉𝑖 =𝑉(𝐺)
其中
𝜒(𝐺) ≤𝛼(𝐺) ≤max𝑛𝑖=1min{deg(𝑣𝑖) +1,𝑖}
上式左边的不等号显然成立,我们考虑右边。
首先我们不难得出:
若 𝑣 ∉⋃𝑚𝑖=1𝑉𝑖
,则 v 与 𝑉1,𝑉2,…,𝑉𝑚
中分别至少有一个点相邻,从而有 deg(𝑣) ≥𝑚
进而
𝑣𝑗 ∈⋃deg(𝑣𝑗)+1𝑖=1𝑉𝑖
另一方面,基于序列 {𝑉𝑖}
的构造方法,我们不难发现
𝑣𝑗 ∈⋃𝑗𝑖=1𝑉𝑖
两式结合即得证。
边着色
对无向图的边着色,要求相邻的边涂不同种颜色。若 G 是 k- 边可着色的,但不是 (𝑘 −1)
- 边可着色的,则称 k 是 G 的边色数,记为 𝜒′(𝐺)
。
Vizing 定理
设 G 是简单图,则 Δ(𝐺) ≤𝜒′(𝐺) ≤Δ(𝐺) +1
若 G 是二部图,则 𝜒′(𝐺) =Δ(𝐺)
当 𝑛
为奇数(𝑛 ≠1
)时,𝜒′(𝐾𝑛) =𝑛
; 当 𝑛
为偶数时,𝜒′(𝐾𝑛) =𝑛 −1
二分图 Vizing 定理的构造性证明
证明
按照顺序在二分图中加边。
我们在尝试加入边 (𝑥,𝑦)
的时候,我们尝试寻找对于 𝑥
和 𝑦
的编号最小的尚未被使用过的颜色,假设分别为 𝑙𝑥
和 𝑙𝑦
。
如果 𝑙𝑥 =𝑙𝑦
此时我们可以直接将这条边的颜色设置为 𝑙𝑥
。
否则假设 $l_x
本页面最近更新:2025/10/13 16:54:57,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:Tiphereth-A, zhouyuyang2002, c-forrest, Chrogeek, CoderOJ, Enter-tainer, iamtwz, ImpleLee, Ir1d, lyccrius, ouuan
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用