📜  威尔士鲍威尔图着色算法

📅  最后修改于: 2021-09-17 06:49:59             🧑  作者: Mango

在图论中,顶点着色是一种标记每个单独顶点的方法,使得没有两个相邻的顶点具有相同的颜色。但是我们需要找出满足给定条件所需的颜色数量。不希望有多种颜色或标签。所以,我们有一个叫做 welsh Powell 算法的算法,它给出了我们需要的最小颜色。该算法还用于查找图的色数。这是一种迭代贪婪方法。

色数:需要 K 种不同颜色才能正确着色的图 G,而且不少,称为 K 色图,数 K 称为图 G 的色数。

威尔士鲍威尔算法包括以下步骤:

  1. 找到每个顶点的度数
  2. 按度数降序列出顶点。
  3. 用颜色 1 为第一个顶点着色。
  4. 向下移动列表并将所有未连接到彩色顶点的顶点着色为相同的颜色。
  5. 对所有具有新颜色的未着色顶点按度数降序重复步骤 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 现场工作专业课程学生竞争性编程现场课程。