Dans les questions suivantes, on se propose de créer une fonction qui puisse déterminer automatiquement une coloration du graphe.
L'algorithme de Welsh-Powell que nous allons utiliser repose sur une méthode gloutonne, selon le principe suivant :
on classe les sommets selon l'ordre décroissant du nombre de leurs voisins,
on associe un ordre aux différentes couleurs (arbitraire, mais qui reste constant tout le long du coloriage),
pour chaque sommet, on choisit la première couleur non utilisée par les voisins.
Tri des couleurs
Les couleurs sont triés de façon arbitraire.
L'important est que cet ordre soit conservé tout le long de l'algorithme.
Question 2
On classe les couleurs dans un tableau COULEURS_POSSIBLES.
La fonction choix_couleur, dont le code est chargé en mémoire, prend en paramètre un graphe, un sommet et un dictionnaire associant les sommets avec leur couleur, et renvoie la première couleur non utilisée par les voisins du sommet ou None si toutes les couleurs sont déjà utilisées.
Dictionnaire incomplet
Il est à noter que le dictionnaire est incomplet et peut même être vide.
Compléter la fonction test_choix_couleur en ajoutant au moins trois autres tests pertinents. Pour chaque test ajouté, une brève justification doit être donnée afin d’expliquer pourquoi ce cas est important à vérifier.
Tests
Il est possible d'utiliser l'IDE ci-dessous afin de visualiser des solutions, en ayant la possibilité de changer le graphe ainsi que les couleurs.
###(Dés-)Active le code après la ligne # Tests (insensible à la casse) (Ctrl+I)
Entrer ou sortir du mode "deux colonnes" (Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran" (Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Compléter la fonction tri_sommets qui prend en paramètre un graphe et qui renvoie la liste des sommets classés par ordre décroissant du nombre de voisins.
Quand plusieurs sommets ont le même nombre de voisins, l'ordre entre eux n'a pas d'importance.
fonction nb_voisins
On pourra s'aider de la fonction nb_voisins, déjà chargée en mémoire, qui prend en paramètre un graphe représenté par un dictionnaire et un sommet, et renvoie le nombre de voisins au sommet initial.
>>>voisins(g1,1)5>>>voisins(g1,3)1
🐍 Script Python
>>>tri_sommets(g1)[1,4,0,2,5,3]
Indice
Il s'agit d'un tri par insertion.
###(Dés-)Active le code après la ligne # Tests (insensible à la casse) (Ctrl+I)
Entrer ou sortir du mode "deux colonnes" (Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran" (Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Compléter la fonction colorie_graphe qui prend en paramètre un graphe représenté par un dictionnaire et qui renvoie un dictionnaire associant à chaque sommet une des quatre couleurs.
Il est à noter qu'il peut exister plusieurs solutions, mais il existe toujours une solution.
fonctions auxiliaires
On pourra s'aider des fonctions précédentes, déjà chargées en mémoire.
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)