Formation I.S.N.

Le parcours en profondeur

Principe de l'algorithme

Comme pour le parcours en largeur, on va utiliser l'exemple d'un site web modélisé par un graphe dans lequel les sommets représentent les pages et les arêtes représentent les liens hypertextes permettant d'aller d'une page à une autre.

On suppose que ce graphe est connexe, c'est-à-dire qu'à partir d'une page donnée, toute autre page est accessible par une série de liens (une chaîne).

On cherche à tester toutes les pages de ce site, c'est-à-dire à parcourir ce graphe en passant par tous ses sommets.



On va procéder à un parcours en profondeur du graphe en mettant les sommets successifs dans une pile (structure LIFO).

Voici la description intuitive de l'algorithme :

  1. On empile le sommet de départ (on visite la page d'accueil du site).
    1. Si le sommet de la pile possède des voisins qui ne sont pas dans la pile, ni déjà passés dans la pile, alors on sélectionne l'un de ces voisins et on l'empile (en le marquant de son numéro de découverte)
    2. Sinon on dépile (c'est-à-dire on supprime l'élément au sommet de la pile).
  2. On recommence au point 2 tant que la pile n'est pas vide.

En d'autres termes, on traite toujours en priorité les liens des pages les plus tard découvertes.

Illustration avec un arbre

Dans l'illustration ci-dessous, un sommet grisé est empilé et un sommet noirci est dépilé.

A tout moment, le sommet de la pile est le sommet portant le plus grand numéro parmi les gris.

Parcours en largeur
Etape 0 Étape 0 : on part du premier sommet S
Etape 1 Étape 1 : on empile le sommet 1
Etape 2 Étape 2 : on empile le sommet 2
Etape 3 Étape 3 : on empile le sommet 3
Etape 4 Étape 4 : on dépile le sommet 3 puisqu'il ne possède aucun voisin non inclus dans la pile.
Etape 5 Étape 5 : on empile le sommet 4
Etape 6 Étape 6 : on empile le sommet 5
Etape 7 Étape 7 : on dépile le sommet 5 puisqu'il ne possède aucun voisin non inclus dans la pile
Etape 8 Étape 8 : on empile le sommet 6
Etape 9 Étape 9 : on dépile le sommet 6 puisqu'il ne possède aucun voisin non inclus dans la pile
Etape 10 Étape 10 : on dépile le sommet 4 puisqu'il ne possède aucun voisin non inclus dans la pile
Etape 11 Étape 11 : on dépile le sommet 2 puisqu'il ne possède aucun voisin non inclus dans la pile
Etape 12 Étape 12 : on empile le sommet 7 car c'est un voisin du sommet 1 non encore passé dans la pile
Etape 13 Étape 13 : on empile le sommet 8
Etape 14 Étape 14 : on dépile le sommet 8
Etape 15 Étape 15 : on empile le sommet 9
Etape 15 Étape 16 : on dépile le sommet 9
Etape 15 Étape 17 : on empile le sommet 10
Etape 15 Étape 18 : on dépile le sommet 10
Etape 15 Étape 19 : on empile le sommet 11 car c'est un voisin du sommet 1 non encore passé dans la pile
Etape 15 Étape 20 : on empile le sommet 12
Etape 15 Étape 21 : on empile le sommet 13
Etape 15 Étape 22 : on dépile le sommet 13
Etape 15 Étape 23 : on empile le sommet 14
Etape 15 Étape 24 : on dépile le sommet 14
Etape 15 Étape 25 : on dépile le sommet 12
Etape 15 Étape 26 : on dépile le sommet 11
Etape 15 Étape 27 : on dépile le sommet 1