Überraschenderweise hatten wir noch keine Herausforderungen beim Färben von Diagrammen!
Bei einem ungerichteten Diagramm können wir jedem Scheitelpunkt eine Farbe zuweisen, sodass keine zwei benachbarten Scheitelpunkte dieselbe Farbe haben. Die kleinste Zahl χ von unterschiedlichen Farben notwendig , dies zu erreichen , wird die genannte chromatische Zahl des Graphen.
Das folgende Beispiel zeigt eine gültige Färbung unter Verwendung der Mindestanzahl von Farben:
(Gefunden bei Wikipedia)
Die chromatische Zahl dieses Graphen ist also χ = 3 .
Schreiben Sie ein Programm oder eine Funktion, die bei einer gegebenen Anzahl von Eckpunkten N <16 (die von 1 bis N nummeriert sind ) und einer Liste von Kanten die chromatische Zahl eines Graphen bestimmt.
Sie können die Eingabe empfangen und die Ausgabe in einem beliebigen geeigneten Format erstellen, solange die Eingabe nicht vorverarbeitet wird. Das heißt, Sie können eine Zeichenfolge oder ein Array verwenden, der Zeichenfolge bequeme Trennzeichen hinzufügen oder ein verschachteltes Array verwenden. Was auch immer Sie tun, die abgeflachte Struktur sollte dieselben Zahlen enthalten wie die folgenden Beispiele (in derselben Reihenfolge).
Sie dürfen keine integrierten graphentheoretischen Funktionen (wie die von Mathematica ChromaticNumber
) verwenden.
Sie können davon ausgehen, dass das Diagramm keine Schleife hat (eine Kante, die einen Scheitelpunkt mit sich selbst verbindet), da dies das Diagramm unfarbig machen würde.
Dies ist Codegolf, die kürzeste Antwort (in Bytes) gewinnt.
Beispiele
Ihr Programm muss mindestens alle diese Probleme in angemessener Zeit lösen. (Alle Eingaben müssen korrekt aufgelöst werden, bei größeren Eingaben kann dies jedoch länger dauern.)
Um den Beitrag zu verkürzen, stelle ich in den folgenden Beispielen die Kanten in einer einzelnen durch Kommas getrennten Liste dar. Sie können stattdessen Zeilenumbrüche verwenden oder die Eingabe in einem geeigneten Array-Format erwarten, wenn Sie dies vorziehen.
Dreieck (χ = 3)
3
1 2, 2 3, 1 3
"Ring" von 6 Eckpunkten (χ = 2)
6
1 2, 2 3, 3 4, 4 5, 5 6, 6 1
"Ring" von 5 Eckpunkten (χ = 3)
5
1 2, 2 3, 3 4, 4 5, 5 1
Beispielbild oben (χ = 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
Verallgemeinerung des Obigen für 7 Eckpunkte (χ = 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
Petersen-Graph (χ = 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
Vollständiger Graph von 5 Scheitelpunkten plus nicht verbundenem Scheitelpunkt () = 5)
6
1 2, 1 3, 1 4, 1 5, 2 3, 2 4, 2 5, 3 4, 3 5, 4 5
Vollständiger Graph von 8 Eckpunkten (χ = 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
Dreiecksgitter mit 15 Eckpunkten (χ = 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