Прежде всего, обратите внимание на предположение 2:
- If | V | k.
- Если мы можем раскрасить график меньше, чем k color и | v |> k тогда это возможно также с точно k цветом - мы можем просто переключить повторяющийся цвет на тот, который мы еще не использовали.
Мы можем использовать жадный алгоритм для решения этой проблемы.
Давайте присваиваем каждому цвету номер [1,2, ..., k] - пусть u представляет цвет i с помощью Ci.Начните с произвольного узла v1 и назначьте ему C1.Теперь давайте запустим BSF на графике для каждого узла и выберите минимальный цвет, который не существует в его узле настройки - если другой узел не имеет цвета, игнорируйте их.Если d (v)> k и все его настройки выполнены в другом цвете, верните false.
Псевдокод:
// v.color init as 0 for all V
Queue <- new Queue(V1)
While Queue not empty:
current <- Queue.pop
if (current.color != 0 )
continue
adj <- v1.getAdj()
min = 0
for each adj:
min = min(min, adj.color)
current.color <- C[min + 1]
Queue.insert(adj)