(pour signaler une erreur monnerat@u-pec.fr)
Coloration de graphes : algorithme glouton
La coloration des sommets d'un graphe (sans boucle) consiste à affecter à tous les sommets de ce graphe une couleur de telle sorte que deux sommets adjacents ne portent pas la même couleur. Le nombre minimum de couleurs pour colorier un graphe s'appelle son nombre chromatique.
Soit un graphe simple. On note son nombre chromatique.
Bien que sa détermination constitue un problème souvent difficile, on peut en donner un encadrement relativement simple :
Vous allez implanter l'algorithme glouton. En voici un rappel :
Entrée : liste ordonnée V des n sommets d'un graphe G liste ordonnée C de couleurs Pour i variant de 1 à n v = V[i] couleur = la première couleur de C non utilisée par les voisins de v colorier(v, couleur) Fin pour
Rappel cet algorithme ne donne pas le nombre chromatique, mais
Je mets à votre dispostion une archive dans laquelle se trouve des fonctions d'importations d'un graphe depuis un fichier texte, ainsi que des fonctions de dessins d'un graphe (orienté ou pas) qui utilise la bibliothèque graphique de l'iut. Voici le header :
#ifndef _GRAPHE_ #define _GRAPHE_ #include<stdio.h> #include<graph.h> typedef struct _graphe { int ordre; /* nb de sommet */ int **ma; /* matrice d'adjacence */ int oriente; /* 1 => oriente, 0 non oriente */ } * graphe ; graphe LireGraphe(FILE * stream); /* lecture depuis un fichier */ void AfficherGraphe(graphe G,FILE * stream); graphe GrapheVide(int ordre); graphe GrapheComplet(int ordre); void DessinerGraphe(graphe G,int x,int y,int R,int r); void DessinerGrapheCouleur(graphe G,int x,int y,int R,int r,couleur * cl); couleur * ColorierGraphe(graphe G,int * nbc); #endif
La seule fonction que vous devez écrire est la fonction ColorierGraphe
qui renvoie
le tableau (sa taille est le nombre de sommets du graphe) des couleurs de chaque sommet. nbc
permet de savoir avec combien de couleurs le graphe a
été colorié.
Le format d'importation d'un graphe est le suivant :
Sommets 6 Oriente 0 A 0 1 A 1 2 A 1 3 A 2 5 A 3 5 A 2 3 A 3 4 A 1 5 A 2 4
Redirigez l'entrée du programe avec un tel fichier :
./main < exemple.g
Dans tous les cas précédents, l'algorithme glouton donne t-il le nombre chromatique ?
Une application
A, B, C, D, E, F, G et H désignent huit poissons. Dans le tableau ci-dessous, une case rouge signifie que les poissons ne peuvent pas cohabiter dans un même aquarium.
A | B | C | D | E | F | G | H | |
A | ||||||||
B | ||||||||
C | ||||||||
D | ||||||||
E | ||||||||
F | ||||||||
G | ||||||||
H |