NSI (terminale) · Chapitre 4 · Exercice de TD
Plus court chemin en nombre d'arêtes
Les graphes · niveau 3 (difficile)
É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 .
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 8 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
Sans compte : le cours, le premier QCM, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.