Zaskakujące, że nie mieliśmy jeszcze żadnych wyzwań dotyczących kolorowania grafów!
Biorąc pod uwagę niekierowany wykres, możemy nadać każdemu wierzchołkowi taki kolor, aby żadne dwa sąsiednie wierzchołki nie miały tego samego koloru. Najmniejsza liczba χ z różnych kolorów, niezbędnych do osiągnięcia tego celu zwany jest liczba chromatyczna wykresu.
Na przykład poniżej pokazano prawidłowe kolorowanie przy użyciu minimalnej liczby kolorów:
(Znaleziono na Wikipedii)
Zatem liczba chromatyczna tego wykresu wynosi χ = 3 .
Napisz program lub funkcję, która przy liczbie wierzchołków N <16 (ponumerowanych od 1 do N ) i liście krawędzi określa liczbę chromatyczną wykresu.
Możesz otrzymać dane wejściowe i wygenerować dane wyjściowe w dowolnym dogodnym formacie, o ile dane wejściowe nie zostaną wstępnie przetworzone. Oznacza to, że możesz użyć łańcucha lub tablicy, dodać do łańcucha wygodne separatory lub użyć zagnieżdżonej tablicy, ale cokolwiek zrobisz, spłaszczona struktura powinna zawierać te same liczby, co w poniższych przykładach (w tej samej kolejności).
Nie możesz używać wbudowanych funkcji związanych z teorią grafów (takich jak Mathematica ChromaticNumber
).
Możesz założyć, że wykres nie ma pętli (krawędzi łączącej wierzchołek ze sobą), ponieważ spowodowałoby to, że wykres nie byłby kolorowy.
To jest kod golfowy, wygrywa najkrótsza odpowiedź (w bajtach).
Przykłady
Twój program musi rozwiązać wszystkie z nich w rozsądnym czasie. (Musi poprawnie rozwiązać wszystkie dane wejściowe, ale w przypadku większych danych może to potrwać dłużej).
Aby skrócić post, w poniższych przykładach przedstawiam krawędzie na pojedynczej liście oddzielonej przecinkami. Zamiast tego możesz użyć podziałów linii lub oczekiwać danych wejściowych w wygodnym formacie tablicowym, jeśli wolisz.
Trójkąt (χ = 3)
3
1 2, 2 3, 1 3
„Pierścień” złożony z 6 wierzchołków (χ = 2)
6
1 2, 2 3, 3 4, 4 5, 5 6, 6 1
„Pierścień” z 5 wierzchołków (χ = 3)
5
1 2, 2 3, 3 4, 4 5, 5 1
Przykładowy obrazek powyżej (χ = 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
Uogólnienie powyższego dla 7 wierzchołków (χ = 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
Wykres Petersena (χ = 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
Pełny wykres 5 wierzchołków plus odłączony wierzchołek (χ = 5)
6
1 2, 1 3, 1 4, 1 5, 2 3, 2 4, 2 5, 3 4, 3 5, 4 5
Pełny wykres 8 wierzchołków (χ = 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
Trójkątna sieć z 15 wierzchołkami (χ = 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