使用BFS进行图形着色 - 贪婪着色?

时间:2013-05-24 16:54:26

标签: algorithm graph-algorithm graph-coloring

如果我可以使用BFS实现图形着色,我想出了下面伪编码的方法。

虽然它确实看起来像一个贪婪的算法,但我不确定它的正确性。有专家评论吗?

colors[MAX_COLORS];
colorsUsedSoFar[] = NIL;
like BFS, color first node u with colors[0] i.e color[u] = colors[0];
colorsUsedSoFar[] += colors[0];

for each node v adjacent to u{
  (if v not already colored){
     color[v] = color from the colorsUsedSoFar[] but NotUsedByItsAdjacents
     If all the colors in colorsUsedSoFar[] are used by adjacents, assign a new color to v)
  }
}

通过'像BFS',我的意思是使用队列并处理直到队列耗尽。

2 个答案:

答案 0 :(得分:1)

这是greedy coloring algorithm的示例。

广度优先搜索(BFS)将隐式为您选择订购。

所以算法是正确的,但不会总是给出最佳颜色(即使用的颜色数量最少)。

更常见的排序是按度数对顶点进行排序,称为Welsh–Powell algorithm

答案 1 :(得分:1)

如果您希望算法以BFS顺序为图形着色,那么我认为您的算法在正确的情况下是完全正常的,除非您在for循环中对其进行着色后没有将节点添加到队列中。而且这也是一种贪婪的方法。你贪婪地选择一个颜色的节点,它根据级别首先出现。不是直截了当的贪心,而是我说的。