DSATUR
implementation by p. Rolland
1998 - 2006

New Methods to color the vertices of a graph

Communication of ACM. April 1979, Vol. 22. Number 4.

Daniel Brelaz

 

[ Introduction | Algorithmique | implémentation | Exemple d'éxécution ]


Introduction

On considère un graphe G=(V,E) simple connexe et non-orienté. On rappelle que la définition usuelle d'un graphe simple est un graphe sans boucles, ni multi-arcs (resp.multi-arêtes). Pour chaque sommet v de V, on calcule le degré de saturation DSAT(v) de la manière suivante:

 

Si aucun voisin de v n'est colorié alors
DSAT(v)=degré(v)
sinon
DSAT(v)= le nombre de couleurs différentes utilisées dans le premier voisinage de v

 

L'algorithme DSATUR est un algorithme de coloration séquentiel, au sens ou il colorie un seul sommet à la fois et tel que:

au départ le graphe n'est pas colorié
on colorie un sommet non-déjà colorié
on stoppe DSATUR quand tous les sommets de G sont coloriés.

Dans un premier temps on voit bien d'une part que la preuve de terminaison est triviale et d'autre part que l'algorithme est séquentiel. Dans le détail l'algorithme est le suivant:

Exemple (3) d'implémentation en C et php


Détails : Exemple de résolution algorithmique

 

Dans cette partie on cherchera à exhiber de manière algorithmique les futurs composants (ie procèdures ou fonctions) qui constitueront notre programme. Dans cette perspective, on peut d'abord traduire de manière naïve le procèdè itératif donné plus haut.

 

A ce stade, clairement on peut simplifier puisque sommet par sommet on colorie le graphe, on a alors:

Il reste alors à définir trois fonctions. On les donne :

 

Pour la dernière fonction il y a, de notre point de vue, plusieurs remarques à formuler. Soit v le sommet dernièrement colorié; soit c sa couleur. La mise à jour des dsat ne s'opère que sur :

1. les sommets non coloriés
2. les voisins vi (i de 1 à degré(v)) du sommet dernièrement coloriés.
3. Pour ces derniers il y a trois cas. Soit vi un voisin de v.
3a. vi ne possèdait aucun voisin colorié avant la coloration de v, auquel cas leur dsat(vi)=degre(vi). On affecte alors dsat(vi)=1.
3b. Sinon ( vi possède des voisins coloriés)
3bi. vi ne possède (mise à part v) aucun voisin de couleur c. On affecte dsat(vi)=dsat(vi)+1
3bii. vi possède (mise à part v) un ou plusieurs voisins de couleur c. On ne modifie pas dsat(vi)
 fonction MiseAJourDesDsat (v,G)
Pour i de 1 à degré(v) faire
si (colorie(iemeVoisinDuSommet(i,v)) = faux) alors
si (dsat((iemeVoisinDuSommet(i,v))=degre((iemeVoisinDuSommet(i,v))) alors
dsat((iemeVoisinDuSommet(i,v))=1
sinon
G <- IncrementationOuPasDeDsat(iemeVoisinDuSommet(i,v),couleurDuSommet(v),G)
fin si
fin pour
Retourner (G)
fin fonction

 


Philippe Rolland - 04/98