Résolution d'un labyrinthe

Un algorithme peut aussi trouver la sortie d'un labyrinthe

Résolution d'un labyrinthe


Un labyrinthe est un tracé sinueux, muni ou non d'embranchements, d'impasses et de fausses pistes, destiné à perdre ou à ralentir celui qui cherche à s'y déplacer.

Lors de ma seconde année de DUT Informatique, en 2014, nous devions réaliser un projet informatique dans le cadre des modélisations mathématiques. Mes partenaires et moi avions choisi de réaliser un algorithme qui pourrait résoudre la plupart des labyrinthes.

En se documentant, nous nous sommes rendu compte que beaucoup d'algorithmes existaient pour sortir d'un labyrinthe (et même si on y est plongé dans le noir !). Cette curiosité de la représentation d'un labyrinthe en mathématiques et en informatique nous a donné envie d'approfondir notre travail. Nous avons ainsi rendu avec l'algorithme, une interface graphique représentant un labyrinthe et son chemin de sortie généré.

Mais alors comment avons-nous fait pour dessiner un labyrinthe et rendre son apparence dynamique avec la programmation informatique ? Et bien nous avons déduit qu'un labyrinthe est tout simplement une matrice constituée de cases où certaines sont des murs et où d'autres sont des chemins. Et en programmation informatique, une matrice est très simple à réaliser car c'est en fait un tableau à deux dimensions. Ensuite, pour distinguer les murs des chemins, nous nous sommes servis d'une numérotation binaire : 1 et 0. Le numéro 1 représente un mur et le numéro 0 un chemin. Au final nous avions donc un tableau qui ressemble à ceci dans le code :

grille = new int[][]{
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
    { 0, 0, 0, 0, 0, 1, 0, 0, 0, 1 },
    { 1, 1, 0, 1, 0, 1, 0, 1, 0, 1 },
    { 1, 0, 0, 1, 0, 1, 1, 1, 0, 1 },
    { 1, 0, 1, 1, 0, 0, 0, 0, 0, 1 },
    { 1, 0, 1, 1, 0, 1, 1, 1, 0, 1 },
    { 1, 0, 1, 1, 0, 1, 0, 0, 0, 1 },
    { 1, 0, 0, 1, 0, 1, 1, 1, 1, 1 },
    { 1, 0, 1, 1, 0, 0, 0, 0, 0, 1 },
    { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 }
};

Enfin, pour le rendre visible à l'écran, nous avons remplacé les 1 par une image noire (pour représenter les murs) et les 0 par une image blanche (pour représenter les chemins). Le rendu est le suivant :

Rendu du labyrinthe

L'algorithme de résolution et son fonctionnement sont expliqués en détail dans le rapport du projet disponible en PDF ci-dessous.

Caractéristiques du projet


Titre Résolution d'un labyrinthe
Description Algorithme récursif qui résout un labyrinthe.
Langage utilisé Java
Année de réalisation 2014
Rapport du projet (PDF) Lien
Accès au code Lien