informatique (tronc commun des prépas scientifiques) · Chapitre 13 · Exercice de TD
Sortir du labyrinthe
Parcours de graphes · niveau 2
É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)Exercices semblables
- Mesurer le piège de la file-liste corrigé
- Le graphe est-il un arbre ? corrigé
- Le graphe biparti, ou le coloriage en deux couleurs corrigé
- L'échelle des mots corrigé
- Les arbres, preuve du théorème corrigé