Sortir du labyrinthe
Exercice · informatique (tronc commun des prépas scientifiques), chapitre 13 — Parcours de graphes
Énoncé
Résoudre un labyrinthe donné sous forme de grille de caractères (# pour mur, . pour passage libre) en trouvant le plus court chemin de l'entrée à la sortie .
Corrigé
On implémente un BFS sur le graphe implicite de la grille :
from collections import deque
def resoudre_labyrinthe(plan: list, E: tuple, S: tuple):
p, q = len(plan), len(plan[0])
dist, pere = {E: 0}, {}
file = deque([E])
while file:
(i, j) = file.popleft()
if (i, j) == S:
break
for (ni, nj) in [(i-1, j), (i+1, j), (i, j-1), (i, j+1)]:
if 0 <= ni < p and 0 <= nj < q and plan[ni][nj] == "." and (ni, nj) not in dist:
dist[(ni, nj)] = dist[(i, j)] + 1
pere[(ni, nj)] = (i, j)
file.append((ni, nj))
if S not in dist:
return (None, None)
# Reconstruction du chemin via l'arbre des pères
c = [S]
while c[-1] != E:
c.append(pere[c[-1]])
c.reverse()
return (dist[S], c)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.