Plus court chemin en nombre d'arêtes
Exercice de TD · niveau 3 (difficile) · NSI (terminale), chapitre 4 — Les graphes
Énoncé
Plus court chemin en nombre d'arêtes.
Écrire une fonction plus_court_chemin(G, depart, arrivee) renvoyant la liste des sommets formant un plus court chemin (en nombre d'arêtes) entre depart et arrivee, ou None si aucun chemin n'existe.
Corrigé
On effectue un BFS en mémorisant, pour chaque sommet visité, le sommet prédécesseur ; on remonte ensuite ces prédécesseurs depuis l'arrivée.
from collections import deque
def plus_court_chemin(G, depart, arrivee):
if depart == arrivee:
return [depart]
predecesseur = {depart: None}
file = deque([depart])
while file:
u = file.popleft()
for v in G[u]:
if v not in predecesseur:
predecesseur[v] = u
if v == arrivee:
# reconstruction du chemin
chemin = [arrivee]
while predecesseur[chemin[-1]] is not None:
chemin.append(predecesseur[chemin[-1]])
chemin.reverse()
return chemin
file.append(v)
return None
G = {0: [1, 2], 1: [0, 3], 2: [0, 3], 3: [1, 2, 4], 4: [3]}
print(plus_court_chemin(G, 0, 4)) # [0, 1, 3, 4] ou [0, 2, 3, 4]
La complexité est , celle d'un BFS, plus la reconstruction du chemin en .
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.