Étonnamment, nous n'avons pas encore eu de défis sur la coloration des graphiques!
Étant donné un graphe non orienté, nous pouvons donner à chaque sommet une couleur telle que deux sommets adjacents ne partagent pas la même couleur. Le plus petit nombre χ de couleurs distinctes nécessaires pour y parvenir est appelé numéro chromatique du graphique.
Par exemple, ce qui suit montre une coloration valide utilisant le nombre minimum de couleurs:
(Trouvé sur Wikipedia)
Le nombre chromatique de ce graphique est donc χ = 3 .
Écrivez un programme ou une fonction qui, étant donné un nombre de sommets N <16 (qui sont numérotés de 1 à N ) et une liste d'arêtes, détermine le nombre chromatique d'un graphique.
Vous pouvez recevoir l'entrée et produire la sortie dans n'importe quel format approprié, tant que l'entrée n'est pas prétraitée. Autrement dit, vous pouvez utiliser une chaîne ou un tableau, ajouter des délimiteurs pratiques à la chaîne ou utiliser un tableau imbriqué, mais quoi que vous fassiez, la structure aplatie doit contenir les mêmes numéros que les exemples ci-dessous (dans le même ordre).
Vous ne pouvez pas utiliser les fonctions intégrées liées à la théorie des graphes (comme celles de Mathematica ChromaticNumber
).
Vous pouvez supposer que le graphique n'a pas de boucle (un bord reliant un sommet à lui-même) car cela rendrait le graphique incolore.
Il s'agit du code golf, la réponse la plus courte (en octets) l'emporte.
Exemples
Votre programme doit au moins résoudre tous ces problèmes dans un délai raisonnable. (Il doit résoudre correctement toutes les entrées, mais cela peut prendre plus de temps pour les entrées plus grandes.)
Pour raccourcir le message, dans les exemples suivants, je présente les bords dans une seule liste séparée par des virgules. Si vous préférez, vous pouvez utiliser des sauts de ligne ou attendre l'entrée dans un format de tableau pratique.
Triangle (χ = 3)
3
1 2, 2 3, 1 3
"Anneau" de 6 sommets (χ = 2)
6
1 2, 2 3, 3 4, 4 5, 5 6, 6 1
"Anneau" de 5 sommets (χ = 3)
5
1 2, 2 3, 3 4, 4 5, 5 1
Exemple d'image ci-dessus (χ = 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
Généralisation de ce qui précède pour 7 sommets (χ = 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
Graphique de Petersen (χ = 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
Graphique complet de 5 sommets, plus un sommet déconnecté (χ = 5)
6
1 2, 1 3, 1 4, 1 5, 2 3, 2 4, 2 5, 3 4, 3 5, 4 5
Graphique complet de 8 sommets (χ = 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
Réseau triangulaire à 15 sommets (χ = 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