# Résolution de labyrinthe

La résolution de labyrinthe est le problème algorithmique qui consiste à trouver la sortie d'un labyrinthe, modélisé mathématiquement. Le labyrinthe ne change pas pendant l'opération, sans quoi le problème peut devenir insoluble (ou, au contraire, trivial).

## Différentes vues du labyrinthe

La sortie d'un labyrinthe relève plus généralement de la recherche de chemin dans le graphe du labyrinthe. On distingue deux cas :
* quand on dispose d'une vue globale, on est capable de distinguer sans ambiguïté deux positions et l'on sait localiser la sortie. On peut alors utiliser ces connaissances pour mesurer une distance (par exemple de Manhattan) à la sortie et déterminer le chemin pour l'atteindre ;
* quand on ne dispose que de la vue locale, celle qu'aurait une personne placée dans le labyrinthe (sans autre perception que les murs avoisinants), on ne peut plus distinguer un couloir ou un carrefour d'un autre. Dans ce cas, la sortie d'un labyrinthe ne relève guère plus de la chance pure, à moins d'exploiter une mémoire quelconque. L'explorateur peut utiliser ses propres ressources, en retenant les endroits déjà visités, les décisions prises et en dressant une carte au fur et à mesure. Il peut aussi marquer l'environnement en notant par exemple les directions déjà explorées aux carrefours. Le fil d'Ariane est lui-même la trace concrète que Thésée laisse derrière lui au fur et à mesure qu'il s'enfonce dans l'antre du Minotaure. Cette dernière méthode, fonctionnant pour n'importe quel labyrinthe, a un équivalent abstrait sous la forme de l'algorithme de Trémaux et des arbres de Trémaux.

## Méthodes de résolution (vue locale)
### Méthode de la main droite

On peut essayer de trouver la sortie d'un labyrinthe en longeant systématiquement un mur en le gardant, sans jamais le lâcher, à main droite ou à main gauche. Cette idée est vérifiée seulement dans le cas d'un labyrinthe parfait, mais elle peut conduire à explorer la totalité du labyrinthe, c'est-à-dire à passer au moins une fois dans toutes les cellules sans exception. Cela correspond à ce que l'on appelle le parcours de l'arbre en profondeur.
La preuve de cette découverte empirique est très simple. Si on ne sort pas d'un labyrinthe [en tenant toujours la main sur un des murs depuis l'entrée], c'est qu'on est en train de « tourner en rond ». C'est-à-dire qu'on tourne autour d'un îlot, comme un pâté de maisons, qu'on peut représenter de manière (topologiquement) équivalente par un carré, comme l'îlot DEF de l’illustration ci-dessous. Or, c'est évident, il est impossible d'arriver à un tel îlot ou carré en suivant toujours le même mur (sauf en partant d'un point de l'îlot). Donc, en suivant le même mur, on est certain de ne pas « tourner en rond » et donc de sortir du labyrinthe.
Ce résultat est vrai pour tout labyrinthe, mais il est tout aussi vrai que cette méthode ne donne pas (nécessairement) le chemin le plus court.
Cette ruse a toutefois été déjouée par les concepteurs de labyrinthes, car dans les labyrinthes à îlots, tourner systématiquement à droite, ou systématiquement à gauche, peut conduire à revenir au point de départ sans être passé par la sortie (tourner systématiquement en rond) si cette sortie est dans un îlot. L'exemple ci-contre présente un labyrinthe à îlots imbriqués où la méthode de la main au mur est inopérante et où il faut passer à des méthodes plus évoluées.
Cette contre-ruse des concepteurs de labyrinthes ne concerne cependant pas ceux qui ont bien réalisé le raisonnement ci-dessus, qui suivent bien le même mur depuis l'entrée et qui n'ont donc pas été parachutés au milieu du labyrinthe. On peut en effet vérifier très facilement qu'il n'est pas possible ainsi d'arriver à tourner autour de l'îlot DEF de l'illustration sans « changer de mur » depuis l'entrée. En suivant le mur de gauche, on suit le chemin le plus court ABCBA. En suivant le mur de droite, on suit le chemin le plus court ABCBA aussi, mais dans l'autre sens. Cette image est une très bonne illustration dudit raisonnement.

### Algorithme de Pledge

D'autres méthodes sont utilisées et implémentées sur des robots (donc avec une vue locale) afin de lui permettre de sortir du labyrinthe. L'algorithme de Pledge (en) par exemple, permet de retrouver la sortie de n'importe quel labyrinthe (où que l'on commence et même s'il y a des ilots) en demandant à garder en mémoire un unique entier. Cet algorithme ne trouve cependant pas la sortie si celle-ci est une trappe dans le plafond plutôt qu'une porte au bout d'un couloir.

### Algorithme de Trémaux

L'algorithme de Trémaux, inventé par Charles Pierre Trémaux, est une méthode efficace pour sortir d'un labyrinthe en marquant les chemins parcourus. Il fonctionne pour tous les labyrinthes qui ont des passages bien définis, mais ne donne pas forcément le chemin le plus court.
À chaque jonction, les chemins sont soit non marqués, soit marquées une fois ou marqués deux fois. L'algorithme fonctionne en suivant ces règles :
* Marquez chaque chemin que vous parcourez une fois. Les marques doivent être visibles aux deux bouts du chemin, donc si ce sont des marques physiques plutôt que stockées dans un ordinateur, la même marque doit être faite aux deux extrémités du chemin.
* Ne jamais entrer dans un chemin marqué.
* Si vous arrivez à une jonction qui n'a pas de marque (à part celle du chemin par lequel vous êtes arrivé), choisissez un chemin non marqué au hasard, marquez-le et suivez-le.
* Sinon:
** si le chemin par lequel vous êtes arrivé n'a qu'une marque, faites demi-tour et marquez-le une seconde fois. Ceci arrive en particulier lorsque vous atteignez un cul-de-sac ;
** sinon, choisissez un des chemins avec le moins de marques (zéro si possible, sinon une), prenez ce chemin en le marquant.
La règle 4.1 du demi-tour transforme efficacement n'importe quel labyrinthe contenant des circuits fermés en graphe simplement connexe : chaque fois qu'on trouve un chemin qui créerait une boucle, on le considère comme un cul-de-sac et on fait demi-tour. Sans cette règle, on peut s'empêcher de visiter une partie du labyrinthe.
Quand on atteint finalement la solution, les chemins marqués une seule fois indiquent le chemin de retour vers le départ. S'il n'y a pas de sortie, l'algorithme ramène au départ où tous les chemins sont marqués deux fois Dans ce cas, chaque chemin est parcouru deux fois, une dans chaque direction. Le parcours résultant est appelé "bidirectionnel double trace".
Essentiellement, cet algorithme découvert au XIXe siècle est utilisé un siècle plus tard comme algorithme de parcours en profondeur.

### Algorithme de Tes

L'algorithme de Tes est une formule qui vérifie que tous les labyrinthes sont construits sur le même modèle physique et que pour s'en échapper, il suffit de tourner une fois du côté droit et la fois d'après du côté gauche à chaque intersection que l'on croise
Cette formule ne permet pas d'obtenir le chemin le plus court, et, peut dans certaines circonstances, être faillible.

### Algorithme de Tarry

Lorsque le voyageur est totalement égaré dans le labyrinthe, l'algorithme en profondeur du mathématicien français Gaston Tarry (cf Gaston Tarry, Le problème des labyrinthes, Nouvelles annales de mathématiques 3e série, tome 14 (1895), p. 187-190) est une double règle qui s'énonce comme suit :
À chaque carrefour du labyrinthe :
* règle n$^o$ 1 : ne reprendre le couloir de première visite de ce carrefour qu'en dernier recours ;
* règle n$^o$ 2 : ne jamais prendre un couloir deux fois dans le même sens.
Cette règle générale permet au voyageur égaré de sortir à coup sûr du labyrinthe quand ce dernier possède une issue (entrée ou sortie) et, dans le cas contraire, de le visiter complètement avant de se retrouver à son carrefour de départ. Voir également Pierre Tougne, L'exploration d'un labyrinthe, Dossier Pour la science, avril/juin 2008).

### Algorithme d'Oystein

Lorsque le voyageur égaré sait qu'il n'est pas trop éloigné de l'entrée du labyrinthe (à moins de 2 ou 3 carrefours par exemple), l'algorithme en largeur du mathématicien norvégien Oystein Ore (cf Oystein Ore, An excursion into labyrinths, in The Mathematics Teacher, p. 367-370, Vol. 52, N$^o$ 5, May 1959) permet de rejoindre cette entrée par cercles concentriques depuis le carrefour de départ, sans besoin d'explorer le labyrinthe en profondeur.
La règle générale est alors la suivante (cf Jearl Walker, Comment traverser un labyrinthe sans se perdre ni tourner en rond, article de la revue Pour la science, rubrique Expériences d'amateur, février 1987) :
* Depuis le carrefour de départ, parcourir un à un les couloirs menant à une distance de 1 carrefour, en marquant d'un trait chacune des deux extrémités de chaque couloir parcouru.
* Condamner les deux extrémités du couloir en changeant les marques par une croix dans les quatre cas suivants :
** le couloir marqué d'un trait est un cul-de-sac ;
** le couloir marqué d'un trait est une boucle reliant deux sorties du même carrefour ;
** le couloir marqué d'un trait mène à un carrefour déjà visité ;
** le couloir mène à un carrefour dont toutes les sorties sont condamnées.
* Revenir au carrefour de départ en suivant les marques.
* Recommencer l'opération en parcourant tous les couloirs non condamnés menant à une distance de 2 carrefours, en suivant les marques, et en ajoutant un trait à chacune des deux extrémités de chaque couloir lors de son parcours aller.
** Le suivi des marques à l'aller et au retour est simple : leur nombre diminue de 1 à chaque carrefour traversé à l'aller et augmente de 1 à chaque carrefour traversé au retour.
* Revenir au carrefour de départ en suivant les marques.
* Recommencer l'opération autant de fois que nécessaire en allant à une distance de 3 carrefours, puis de 4, etc.
Cette règle générale permet au voyageur égaré de sortir à coup sûr du labyrinthe quand ce dernier possède une issue (entrée ou sortie) et, dans le cas contraire, de le visiter complètement avant de se retrouver à son carrefour de départ.

## Méthodes de résolution (vue globale)

Lorsqu'on a une vue d'ensemble d'un labyrinthe, celui-ci peut se modéliser par une matrice d'incidence (M) dont les lignes et les colonnes sont les numéros de carrefour et dont chaque élément de la matrice indique la nombre de couloirs (0, 1, 2, etc.) reliant un carrefour à un autre [WAL].
La matrice d'incidence permet également de modéliser un labyrinthe comportant des couloirs à sens unique à condition que ces couloirs ne forment pas une boucle reliant deux sorties du même carrefour ou une boucle reliant deux carrefours.
Pour des besoins d'étude, tout labyrinthe peut être simplifié comme suit :
* tout cul-de-sac peut être supprimé en considérant qu'il est intégré (en tant que cul-de-sac peu profond) au carrefour y menant ;
* toute boucle reliant deux sorties du même carrefour peut être supprimée en considérant qu'elle est intégrée (en tant qu'îlot de petite taille) au carrefour ;
* toute boucle reliant deux carrefours peut être réduite à un seul couloir entre ces carrefours en considérant qu'elle est intégrée (en tant qu'îlot de petite taille) à ce couloir ;
* tout carrefour dont le nombre de couloirs se réduit à 2 par l'une ou plusieurs des simplifications précédentes peut être supprimé en raccordant directement les deux couloirs ;
* tout carrefour comportant n couloirs avec n > 3 peut être remplacé par un anneau formé de n carrefours comportant 3 couloirs chacun à condition d'accepter de violer la règle n$^o$ 2 de Tarry dans le carrefour modifié afin de pouvoir parcourir l'anneau entre deux carrefours quelconques.
Si le voyageur sait traverser le labyrinthe modifié, alors il peut aussi trouver un chemin dans le labyrinthe original en rétablissant les carrefours et couloirs originaux.
La matrice d'incidence d'un labyrinthe permet également de trouver le nombre de couloirs du chemin le plus court reliant un carrefour à un autre. En multipliant la matrice M par elle-même, on obtient une nouvelle matrice (M2) dont les éléments indiquent le nombre de façons différentes d'aller d'un carrefour à un autre par un chemin constitué de 2 couloirs. En répétant n fois l'opération, on obtient une matrice (Mn) dont les éléments indiquent le nombre de façons différentes d'aller d'un carrefour à un autre par un chemin constitué de n couloirs [WAL].
Pour trouver le chemin le plus court reliant un carrefour à un autre, il suffit alors d'élever la matrice M à une puissance telle que l'élément correspondant à la liaison entre ces deux carrefours devienne non nul. La puissance donne alors le nombre de couloirs du chemin le plus court [WAL].
[WAL] Jearl Walker, Comment traverser un labyrinthe sans se perdre ni tourner en rond, article de la revue Pour la science, rubrique Expériences d'amateur, février 1987.

## Résolution analogique

Si l'on dépose une goutte de savon à l'entrée d'un labyrinthe empli d'un liquide aqueux (du lait, par exemple), le savon s'écoule jusqu'à la sortie en suivant le chemin le plus direct, sans exploration d'autres chemins. Ce phénomène étonnant, qui n'a été compris qu'en 2025, s'explique par de subtiles interactions avec de faibles quantités de tensioactifs déjà présents dans le liquide du labyrinthe, comme la caséine du lait. L'explication est validée par des modèles mathématiques assez simples$^,$.