Algorithme de parcours d'un graphe en profondeur

Algorithme

def parcours_rec_profondeur(g, noeud, liste_sommets_visites):
    liste_sommets_visites.append(noeud)
    for voisin in g.liste_voisins(noeud):
        if voisin not in liste_sommets_visites:
            parcours_rec_profondeur(g, voisin, liste_sommets_visites)

Déroulement détaillé sur un exemple

Graphe

On choisi de parcourir le graphe à partir du nœud .

Déroulement détaillé

p_r_p avec nœud = 1 et l_s_v = []

Ajout de dans l_s_v donc l_s_v vaut [1]

Boucle (🡆) avec les voisins de , c'est-à-dire et :

🡆 Itération avec voisin = 2 :

2 n'est pas dans l_s_v donc :

p_r_p avec nœud = 2 et l_s_v = [1]

Ajout de dans l_s_v donc l_s_v vaut [1,2]

Boucle (🡆) avec les voisins de , c'est-à-dire , :

🡆 Itération avec voisin = 4 :

4 n'est pas dans l_s_v donc :

p_r_p avec nœud = 4 et l_s_v = [1,2]

Ajout de dans l_s_v donc l_s_v vaut [1,2,4]

Boucle (🡆) avec les voisins de , c'est-à-dire :

🡆 Itération avec voisin = 5 :

p_r_p avec nœud = 5 et l_s_v = [1,2,4]

Ajout de dans l_s_v donc l_s_v vaut [1,2,4,5]

Boucle (🡆) avec les voisins de , c'est-à-dire :

🡆 Itération avec voisin = 1 :

1 est déjà dans l_s_v, donc rien.

🡆 Fin de la boucle

🡆 Fin de la boucle

🡆 Itération avec voisin = 5

5 est déjà dans l_s_v donc rien.

🡆 Fin de la boucle

🡆 Itération avec voisin = 3

3 n'est pas dans l_s_v donc :

p_r_p avec nœud = 3 et l_s_v = [1,2,4,5]

Ajout de dans l_s_v donc l_s_v vaut [1,2,4,5,3]

Boucle (🡆) avec les voisins de , c'est-à-dire :

🡆 Itération avec voisin = 4 :

4 est déjà dans l_s_v, donc rien

🡆 Fin de la boucle

🡆 Fin de la boucle