Pour implémenter ce graphe, on peut utiliser un dictionnaire de liste de successeurs:
graphe = {
"A": ["B"],
"B": ["A", "C", "D"],
"C": ["B", "E"],
"D": ["B", "E"],
"E": ["C", "D"]
}
Parcourir un graphe en profondeur consiste à explorer le graphe de voisin en voisin jusqu´à tomber sur une impasse ou un sommet déjà visité. La récursivité est ici à l´œuvre. En voici un exemple:
def parcours_profondeur_rec(graphe, sommet, visites=None):
if visites is None:
visites = []
print(sommet)
visites.append(sommet)
for voisin in graphe[sommet]:
if voisin not in visites:
parcours_profondeur_rec(graphe, voisin, visites)
# Exemple d'appel
parcours_profondeur_rec(graphe, "A")
Principe:
print(sommet).visites.add(sommet)).Affiche: A → B → C → E → D
(L’ordre exact dépend de l’ordre dans le dictionnaire.)
où :
L'algorithme de parcours en largeur (ou BFS, pour Breadth First Search en anglais) permet le parcours d'un graphe de la manière suivante : on commence par explorer un sommet source, puis ses successeurs, puis les successeurs non explorés des successeurs, etc. Comme pour les arbres, il utilise une file:
def parcours_largeur(graphe, depart):
visites = [] # liste des sommets déjà visités
file=[] # On crée une file vide
file.append(depart) # On enfile le sommet de départ
while file:
sommet = file.pop(0)
if sommet not in visites:
print(sommet)
visites.append(sommet)
for voisin in graphe[sommet]:
file.append(voisin)
# Exemple d'appel
parcours_largeur(graphe, "A")
On obtient: Affiche: A → B → C → D → E
(L’ordre exact dépend de l’ordre dans le dictionnaire.)
file.append correspond à enfilerfile.pop(0) correspond à défiler
🔗 Un exercice intéressant avec DFS, Amérique du Nord – 2023.
🔗 Cet exercice aborde les parcours de graphes dans la partie B.