如果我可以使用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',我的意思是使用队列并处理直到队列耗尽。
答案 0 :(得分:1)
这是greedy coloring algorithm的示例。
广度优先搜索(BFS)将隐式为您选择订购。
所以算法是正确的,但不会总是给出最佳颜色(即使用的颜色数量最少)。
更常见的排序是按度数对顶点进行排序,称为Welsh–Powell algorithm。
答案 1 :(得分:1)
如果您希望算法以BFS顺序为图形着色,那么我认为您的算法在正确的情况下是完全正常的,除非您在for循环中对其进行着色后没有将节点添加到队列中。而且这也是一种贪婪的方法。你贪婪地选择一个颜色的节点,它根据级别首先出现。不是直截了当的贪心,而是我说的。