Parcours d’un graphe en largeur d'abord
Principe
On choisit un sommet de départ SI le sommet est déjà visité, on ne fait rien SINON, on le marque comme visité (en l'ajoutant dans la liste
visites
) ET Pour chaque sommet connecté, on réitère récursivement cet algorithmePour tester cet algorithme, il est plus simple de d'impléter un graphe exemple sous la forme d'une liste d'adjacence.
Text Only
VARIABLES
depart : noeud (origine)
graph : un graphe (liste des voisins)
noeud : noeud
voisin : noeud
file : file (liste vide au départ)
visites : liste
nonvisites : liste
DEBUT
bfs(graph, depart) :
visites ← liste vide
chemin ← liste vide
enfiler depart dans chemin
TANT QUE chemin n'est pas vide :
noeud ← defiler(chemin)
SI noeud n'appartient pas à visites :
ajouter noeud à visites
nonvisites ← listes des voisins de noeud non visités
POUR chaque s dans nonvisites :
ajouter s dans chemin à la 1ère position
FIN POUR
FIN SI
FIN TANT QUE
Renvoyer visites
FIN
🐍 Script Python
def bfs(graph, depart):
visited = []
file=[]
file.append(depart)
while file:
node = file.pop()
if node not in visited:
visited.append(node)
unvisited = [n for n in graph[node] if n not in visited]
for s in unvisited:
file.insert(0, s)
return visited
ma_liste = {'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'D'],
'D': ['B', 'C', 'E'],
'E': ['B', 'D', 'F', 'G'],
'F': ['E', 'G'],
'G': ['E', 'F', 'H'],
'H': ['G']}
print(bfs(ma_liste, 'E'))