Удивительно, но у нас еще не было проблем с раскраской графиков!
Учитывая неориентированный граф, мы можем дать каждой вершине такой цвет, чтобы никакие две смежные вершины не имели одинаковый цвет. Наименьшее число χ различных цветов, необходимое для достижения этого, называется хроматическим числом графа.
Например, ниже показано допустимое окрашивание с использованием минимального количества цветов:
(Найдено в Википедии)
Таким образом, хроматическое число этого графа χ = 3 .
Напишите программу или функцию, которая, учитывая количество вершин N <16 (которые пронумерованы от 1 до N ) и список ребер, определяет хроматическое число графа.
Вы можете получать входные данные и создавать выходные данные в любом удобном формате, если входные данные не были предварительно обработаны. То есть вы можете использовать строку или массив, добавить в строку удобные разделители или использовать вложенный массив, но что бы вы ни делали, выровненная структура должна содержать те же числа, что и примеры ниже (в том же порядке).
Вы не можете использовать встроенные функции, связанные с теорией графов (например, Mathematica ChromaticNumber).
Вы можете предположить, что граф не имеет петли (ребро, соединяющее вершину с самим собой), так как это сделает граф неокрашиваемым.
Это код гольф, самый короткий ответ (в байтах) выигрывает.
Примеры
Ваша программа должна, по крайней мере, решить все эти проблемы в разумные сроки. (Он должен правильно решать все входные данные, но это может занять больше времени для больших входных данных.)
Чтобы сократить пост, в следующих примерах я представляю ребра в одном списке, разделенном запятыми. Вместо этого вы можете использовать разрывы строк или ожидать ввода в некотором удобном формате массива, если хотите.
Треугольник (х = 3)
3
1 2, 2 3, 1 3
«Кольцо» из 6 вершин (х = 2)
6
1 2, 2 3, 3 4, 4 5, 5 6, 6 1
«Кольцо» из 5 вершин (х = 3)
5
1 2, 2 3, 3 4, 4 5, 5 1
Пример изображения выше (χ = 3)
6
1 2, 2 3, 3 4, 4 5, 5 6, 6 1, 1 3, 2 4, 3 5, 4 6, 5 1, 6 2
Обобщение вышесказанного для 7 вершин (х = 4)
7
1 2, 2 3, 3 4, 4 5, 5 6, 6 7, 7 1, 1 3, 2 4, 3 5, 4 6, 5 7, 6 1, 7 2
Граф Петерсена (χ = 3)
10
1 2, 2 3, 3 4, 4 5, 5 1, 1 6, 2 7, 3 8, 4 9, 5 10, 6 8, 7 9, 8 10, 9 6, 10 7
Полный граф из 5 вершин плюс несвязная вершина (χ = 5)
6
1 2, 1 3, 1 4, 1 5, 2 3, 2 4, 2 5, 3 4, 3 5, 4 5
Полный граф из 8 вершин (х = 8)
8
1 2, 1 3, 1 4, 1 5, 1 6, 1 7, 1 8, 2 3, 2 4, 2 5, 2 6, 2 7, 2 8, 3 4, 3 5, 3 6, 3 7, 3 8, 4 5, 4 6, 4 7, 4 8, 5 6, 5 7, 5 8, 6 7, 6 8, 7 8
Треугольная решетка с 15 вершинами (х = 3)
15
1 2, 1 3, 2 3, 2 4, 2 5, 3 5, 3 6, 4 5, 5 6, 4 7, 4 8, 5 8, 5 9, 6 9, 6 10, 7 8, 8 9, 9 10, 7 11, 7 12, 8 12, 8 13, 9 13, 9 14, 10 14, 10 15, 11 12, 12 13, 13 14, 14 15