## Algorithme basique de recherche du plus court chemin

Pour conclure avec cette leçon d'introduction aux algorithmes de sortie de labyrinthe, nous allons étudier un autre moyen de trouver la sortie. La buggle de cette leçon est spéciale : c'est une jedi. Elle peut ressentir la Force. Cela signifie qu'elle peut ressentir son environnement.

Sans même changer de place, elle peut retrouver des informations sur le monde qui l'entoure, avec les instructions suivantes :

- `getMondeLargeur()` pour connaître la largeur du monde
- `getMondeHauteur()` pour connaître la hauteur du monde.
- `aMurNord(x,y)` indique si la cellule (x,y) de ce monde est fermée par un mur en haut.
- `aMurOuest(x,y)` indique si la cellule (x,y) de ce monde est fermée par un mur à gauche.
- `aBiscuit(x,y)` indique si un baggle se trouve dans la cellule (x,y) de ce monde.
- `setIndication(x,y,i)` ajoute une indication entière `i` sur le sol de la cellule (x,y).
- `getIndication(x,y)` retourne l'indication entière qui se trouve dans la cellule (x,y) (ou bien la valeur 9999 s'il n'y a pas d'indication à l'endroit indiqué).

Il est bon de noter qu'il n'est pas possible de construire un mur sur le côté inférieur ou le coté droit d'une case. Néanmoins, quand de tels murs existent, cela signifie qu'il a été construit sur une case voisine -- comme mur supérieur (respectivement gauche) sur la case qui est située en dessous (respectivement sur à droite) de la case courante.

### Objectif de cet exercice

Votre buggle devrait tout d'abord écrire sur chaque case importante la distance qui la sépare de la sortie.
Pour cela, trouvez la sortie et écrivez 0 dessus. Ensuite, écrivez 1 sur toutes les cases adjacentes à la sortie qui n'en sont pas séparées par un mur. Ensuite, écrivez 2 sur toutes les cases à partir desquelles on peut atteindre une case marquée 1, puis faites de même pour toutes les cases jusqu'à avoir numéroté toutes les cases du monde.

Une fois que toutes les cases sont marquées, faites en sorte que votre buggle jedi trouve le plus court chemin en suivant les indications écrites au sol. Pour cela, il lui suffit à chaque pas d'aller sur la case de plus petite distance parmi celles accessibles. Vous pouvez utiliser la méthode `void setDirection(Direction d)` pour faire regarder votre buggle dans une direction spécifique comme `[!scala|java|python]Direction.[/!]NORD`, `[!scala|java|python]Direction.[/!]SUD`, `[!scala|java|python]Direction.[/!]EST` ou `[!scala|java|python]Direction.[/!]OUEST`, qui correspondent respectivement au nord, sud, est et ouest.

Utilises la Force Luke !