– On calcule les sommets accessibles depuis vdans le transpos´e : liste C(co-accessibles dans
G!)
– La composante fortement connexe est A∩C.
Les trois premi`eres ´etapes se font en O(n+m) sur les graphes cod´es en listes d’adjacence, et
en O(n2) s’ils sont cod´es en matrices d’adjacence. La derni`ere est en O(n).
Correction 5 : On applique l’algo (cf exercice suivant) sur le graphe...
Correction 6 : Un pseudo-code possible du parcours en profondeur avec relance. On n’utilise
pas de marques : les dates remplacent. Un d´ebut `a -1 signifie un sommet non encore atteint, un
d´ebut ≥0 mais une fin de -1 signifie un sommet en cours de visite.
Variables globales:
sommet x,y
entier temps = 0, debut[V], fin[V] tableaux initialises `a -1
Debut :
Pour x de 1 a n
Si marquage[x] = faux
PP(x)
Fin
Procedure PP(sommet v)
debut[v] = temps++
pour chaque voisin y de v faire
si debut[y] == -1
Afficher (v,y) est un arc de parcours
PP(y)
sinon si fin[v] == -1
Afficher (v,y) est un arc de retour (aussi appel´e en arri`ere)
sinon si fin[y] < debut [v]
Afficher (v,y) est un arc transversal
sinon
Afficher (v,y) est un arc en avant
fin[v] = temps++
Correction 7 :
1a) Un parcours en profondeur
1b) Un parcours en largeur
2 C’est un parcours en profondeur, donc a priori c’est une solution au a).
Le premier probl`eme c’est que s’il y a plusieurs composantes connexes dans le graphe, on
risque de prendre un sommet dans une mauvaise composante et passer `a cˆot´e d’un circuit.
Pour prendre ¸ca en compte, il suffit de v´erifier s’il reste des sommets non trait´es avant de
conclure qu’il n’y a pas de circuit.
Un probl`eme plus s´erieux est illustr´e en faisant tourner l’algo sur le graphe de la figure . Si
on a que deux marquages l’arc transversale peut ˆetre pris pour un arc de retour donnant un
faux circuit.