Plus précisement, examinons la situation à l’instant fin[v]. À cet instant d’après la propriété des inter-
valles, un sommet xdu circuit Cest soit noir (cas 1), soit blanc (cas 2). Par hypothèse, pest blanc,
et considérons le premier prédecesseur de psur Cqui soit noir (ce prédécesseur existe, car vest noir),
nommons le s. Le successeur de ssur Cest blanc. Or, on vérifie aisément sur la définition de l’algorithme,
qu’à tout instant le successeur d’un noeud noir est noir. Le successeur de ssur Cne peut être blanc et
noir à la fois. Contradiction.
Exercice 5 On fait une modification du parcours en largeur. En effet, il trouve des plus courts chemins,
donc il y a lieu d’espérer qu’il trouve aussi des plus courts circuits. Cet algorithme est suivi d’une preuve
pour se convaincre de cette affirmation.
Procédure Cherche_Circuit(G,s)1
// G= (S,A) graphe orienté2
pour chaque x∈Sfaire3
Marquage[x] := faux ;4
Père[x] := nil ;5
F:= File_Vide ;6
Enfiler(s,F);7
Marquage[s] := vrai ;8
Profondeur[s] := 0 ;9
tant que Fnon vide faire10
x:= Defiler(F);11
pour chaque y∈Voisinage(x,G)faire12
si non(Marquage[y])alors13
Enfiler(y,F);14
Marquage[y] := vrai ;15
Père[y] := x;16
Profondeur[y] := Profondeur[x] + 1;17
sinon18
si y=salors19
tant que x6=nil faire20
afficher(x);21
x:= Père[x] ;22
renvoyer vrai ;23
Preuve :
–Terminaison. On étudie les exécutions possibles de l’algorithme. Si une exécution entre dans le sinon
de la ligne 18, alors l’algorithme termine (en renvoyant vrai). Si au contraire elle n’entre jamais dans
ce sinon, alors elle se déroule exactement comme un parcours en profondeur, et donc termine aussi. On
conclut que l’algorithme termine.
–Preuve que l’algorithme trouvera un circuit s’il y en a un passant par s. On suppose qu’il
existe au moins un circuit passant par s. On considère, parmi les circuits de longueur minimale passant
par s, les sommets de plus grande profondeur en partant de s. Parmi ceux-là, l’un d’eux sera le premier
atteint par le parcours en largeur effectué par l’algorithme. Pour ce sommet, on entre dans le sinon de
la ligne 18, et l’algorithme renvoie vrai.
Jusqu’à ce qu’on entre dans le sinon de la ligne 18, les invariants du cours sur le parcours en largeur
sont vérifiés. En particulier, les sommets dont la distance depuis s est strictement inférieure ont déjà
été visités, et l’arbre obtenu est un arbre des plus courts chemins depuis s.
–Minimalité d’un circuit trouvé Ainsi, au moment où on rentre dans le sinon, on trouve donc un
circuit sur s. Et on sait que tout sommet x dont la distance à s est strictement inférieure a été visité
précédemment. Puisqu’on n’est entré dans le sinon de la ligne 18 à la visite de x, c’est que x n’est pas
lié a s. On en déduit que le cycle passant par s trouvé par l’algorithme est de longueur minimale.
3