Département Informatique
TD 3
Graphes et langages
M2201
2015–2016
Dans ce TD, nous allons étudier un algorithme qui permet de calculer tous les sommets atteignables par
un chemin à partir d’un sommet initial.
Exercice 1 : Analyse d’algorithme : parcours en profondeur d’abord dans un graphe
Dans cette section, nous allons étudier un algorithme de parcours de graphe à partir d’un sommet i0. On
dira que iest descendant de js’il existe un chemin allant de jài.
Dans cet algorithme, on utilise les notations suivantes :
—p(i): cette valeur permet de savoir si le sommet ia été visité. Lorsque in’est pas visité, p(i) = 0.
Sinon, p(i)a la valeur du sommet à partir duquel on l’a atteint. Par convention, on fixe p(i0) = i0.
—n(i)est le nombre de successeurs de iqui n’ont pas encore été visités à partir de i. Initialement, cette
valeur est initialisée à |N+(i)|le nombre de successeurs de i.
// initialisation de l’algorithme
pour i= 1, . . . , n faire
p(i)←0;
n(i)← |N+(i)|;
fin
p(i0)←i0;
i←i0;
// on continue tant qu’on n’est pas revenu sur i0en visitant tous ses successeurs
tant que n(i0)>0ou i6=i0faire
// on teste si tous les successeurs de iont été vus
si n(i)6= 0 alors
sélectionner parmi les successeurs de ile sommet jvenant en position n(i);
n(i)←n(i)−1;
si p(j) = 0 alors
p(j)←i;
i←j;
fin
sinon
// on remonte d’un cran en revenant sur le sommet qui a permis d’atteindre i
// on dit qu’on ”ferme” le sommet i
i←p(i)
fin
fin
Algorithme 1 : Parcours en profondeur d’abord dans un graphe
Q1 : Appliquez l’algorithme au graphe de la Figure 1, avec comme sommet initial 1.
On admettra dans un premier temps qu’on construit pas à pas une arborescence de racine i0. On rap-
portera la situation à chaque passage de la boucle tant que en utilisant les conventions suivantes :
— initialement, l’arborescence ne contient que la racine ;
— quand on sélectionne un sommet jtel que p(j) = 0, on ajoute un arc avec un trait plein à l’arbores-
cence ;
— quand on ferme le sommet i, on met l’arc (p(i), i)en pointillé.
Q2 : Dans quelle situation est-on lorsque dans le test, on a n(i0) = 0 et i=i0?
Q3 : Montrez qu’au cours de l’algorithme, on construit une arborescence de racine i0.
Q4 : À quelle condition un sommet est-il retiré de l’arborescence ?
Q5 : Montrez que tout sommet qui est descendant de i0est atteint au cours de l’algorithme.
Q6 : Quelle est la complexité de l’algorithme si on utilise une liste de sucesseurs ?
Q7 : Même question si on utilise une matrice d’adjacence.