在图论中,顶点着色是一种标记每个单独顶点的方法,使得没有两个相邻的顶点具有相同的颜色。但是我们需要找出满足给定条件所需的颜色数量。不希望有多种颜色或标签。所以,我们有一个叫做 welsh Powell 算法的算法,它给出了我们需要的最小颜色。该算法还用于查找图的色数。这是一种迭代贪婪方法。
色数:需要 K 种不同颜色才能正确着色的图 G,而且不少,称为 K 色图,数 K 称为图 G 的色数。
威尔士鲍威尔算法包括以下步骤:
- 找到每个顶点的度数
- 按度数降序列出顶点。
- 用颜色 1 为第一个顶点着色。
- 向下移动列表并将所有未连接到彩色顶点的顶点着色为相同的颜色。
- 对所有具有新颜色的未着色顶点按度数降序重复步骤 4,直到所有顶点都着色。
通过从最高的度开始,我们确保可以尽早处理冲突次数最多的顶点。
Vertex | Degree |
---|---|
A | 2 |
B | 2 |
C | 1 |
D | 4 |
E | 2 |
F | 2 |
G | 3 |
H | 5 |
I | 3 |
J | 3 |
K | 5 |
首先,按度数降序排列列表。如果打平,我们可以随机选择任何方式来打破它。
因此,新订单将是:H、K、D、G、I、J、A、B、E、F、C
现在,遵循威尔士鲍威尔图着色算法,
H – 颜色 红色
K – 不要将红色涂成红色,因为它连接到 H
D – 颜色 红色
G – 不要将红色涂成红色,因为它连接到 H
I – 不要将红色涂成红色,因为它连接到 H
J – 不要将红色涂成红色,因为它连接到 H
A – 不要将红色涂成红色,因为它连接到 H
B – 不要将红色涂成红色,因为它连接到 D
E – 颜色 红色
F – 不要将红色涂成红色,因为它连接到 E
C – 不要将红色涂成红色,因为它连接到 D
在此之后,图表将如下所示。
忽略已经着色的顶点,我们只剩下:K、G、I、J、A、B、F、C
我们可以用第二种颜色绿色重复这个过程
K——绿色
G – 不要涂成绿色,因为它与 K 相连
I – 绿色
J – 不要给绿色涂上颜色,因为它与 I 相连
A – 绿色
B – 不要涂绿色,因为它与 A 相连
F——绿色
C——绿色
再次,忽略彩色顶点,我们剩下 G、J、B 让我们用蓝色给它上色。
G – 蓝色
J——蓝色
B——蓝色
最终图如下所示。现在,我们可以看到,使用 Welsh Powell 算法,我们可以仅用 3 种颜色(此图的色数为 3 )为顶点着色,这是最优解,因为此图至少包含一个三角形。
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。