Dans l'exemple que vous donnez, il n'y a qu'un seul chemin réel du début à la fin. Si c'est tout ce que vous voulez, je pense que vous pourriez utiliser des marches aléatoires !
Le concept est simple : compte tenu des limites extérieures du labyrinthe, d'un point de départ et d'un point d'arrivée, écrivez une fonction permettant de générer des parcours aléatoires à partir du point de départ qui se terminent au point d'arrivée. Les conditions seraient que notre "marcheur aléatoire" ne puisse se déplacer que vers le haut, le bas, la droite ou la gauche à partir de la case précédente, et qu'il ne puisse pas s'approcher à moins d'une case d'une case précédemment traversée (cela crée des murs).
À mon avis, il y a deux défis algorithmiques à relever. Le premier consiste à vérifier si nous sommes à moins d'un carré d'un carré déjà traversé (collisions). Peut-être pourrions-nous maintenir une liste des carrés traversés (leurs coordonnées) et des limites du labyrinthe, et pour chaque nouveau carré, évaluer la distance par rapport à chaque carré de la liste. Mais cela ne semble pas très efficace.
L'autre défi consiste à atteindre le point final avec notre marche aléatoire. Si les collisions avec les carrés précédemment traversés n'étaient pas un problème, nous serions obligés d'atteindre notre point final, mais avec elles, nous avons le problème de nous isoler du point final. Le moyen d'éviter cela est de vérifier et d'éviter d'entrer dans des boucles. Si nous évitons d'entrer dans les boucles formées par le chemin parcouru et/ou les limites du labyrinthe, nous conservons un chemin possible vers le point final. Pour ce qui est de déterminer si nous sommes dans une boucle... Meh, c'est un peu difficile.
Si vous disposez déjà d'un algorithme de résolution de labyrinthe, vous pouvez l'exécuter à chaque fois qu'une collision est possible pour voir s'il existe un chemin entre votre case actuelle et le point d'arrivée. Lorsque vous l'exécutez, faites-lui penser que tous les carrés précédemment traversés sont des murs, ainsi que leurs limites.
1 votes
Y a-t-il des restrictions, par exemple, pas de carré noir 2x2 ?
0 votes
@Lie Ryan : Non. Bien que ce serait bien d'avoir de tels algorithmes parmi les réponses.
0 votes
En rapport : stackoverflow.com/questions/2641964/
3 votes
C'est un labyrinthe, un labyrinthe nécessite plus d'un chemin.
1 votes
Ce que vous générez est connu sous le nom de "labyrinthe unicursal" - ce qui pourrait vous aider à trouver des algorithmes pour cela.
0 votes
Ce que vous voulez ressemble à un chemin Hamiltonien ( fr.wikipedia.org/wiki/Hamiltonian_path ) sur un graphique en grille ( mathworld.wolfram.com/GridGraph.html )