Я читаю алгоритм раскраски вершин. Я вижу документы, объясняющие, как проблема может быть решена с помощью BFS (подразумевается, что проблема может быть решена за O(|V|+|E|). Но я также вижу упоминание о том, что это NP-сложная задача.
Как эти двое сочетаются? Не могли бы вы пролить немного света?
Вот алгоритм, с которым я столкнулся, который мне показался полиномиальным решением общего случая:
Идентифицируйте каждый цвет цифрой. Начните с узла и назначьте ему цвет с наименьшим номером. Посетите каждого своего соседа с помощью BFS. При посещении узла проверьте цвет каждого из его соседей и назначьте цвет с наименьшим номером, который не назначен ни одному из его соседей.
Сказано, что подход BFS работает только для 2-х цветов. Я могу понять, почему описанная выше техника не работает для более чем двух цветов.