Ich versuche ein Programm zu erstellen, das ein zufällig erzeugtes Labyrinth durchquert, in dem 1s offen und 0s Wände sind. beginnend in der oberen linken und endet in der unteren rechten Ecke. Der Pfad kann nach oben, unten, links und rechts gehen.Finde alle möglichen Wege durch ein Labyrinth
Momentan gibt mir mein Programm eine Lösung, aber ich habe Probleme damit, mehr als einen Pfad zu drucken.
Ich habe mehrere verschiedene Versionen dieses Problems gelesen, aber ich kann mit meinen Parametern keine finden.
Hier ist mein Code, ich habe den Teil weggelassen, wo ich zufällig mein Labyrinth erzeuge.
Ich habe den Teil meiner Haupt weggelassen, wo ich zufällig mein Labyrinth generieren.
int main(){
if(!solveMaze(**mat, 0, 0, sol, 0)){
printf("No possible paths, run program again\n");
}
else{
printf("the shortest path is %d\n", minMatrix);
}
}
Zum Beispiel, wenn ich das Labyrinth haben
1100111111
1101111111
1111110110
1110011111
1101101011
1111101011
1110111101
1100111111
1110111011
1101101111
Es gibt mir den ersten Weg, dass es
1000000000
1001100000
1111110000
1100011000
1100001000
1100001000
1100001000
1100001011
1100001011
1100001111
findet Obwohl es einen Umweg nimmt, dorthin zu gelangen, aufgrund der Vorlieben gehen in der Reihenfolge von unten, oben, rechts und links, es ist immer noch ein Weg.
Also letztlich bin ich nicht sicher, wie für mehrere Pfade zu iterieren.
Ich würde vorschlagen, mit [A *] (https://en.wikipedia.org/wiki/A*_search_algorithm). Es gibt viele einfach zu verwendende Implementierungen. Es kann so konfiguriert werden, dass es basierend auf mehreren Faktoren, die Sie angeben können, einen optimalen Pfad findet. Wenn Sie dies wirklich von Hand tun müssen, sollten Sie eine Endlosschleife in Betracht ziehen, da ein möglicher Pfad eine beliebige Anzahl von redundanten "links nach rechts" oder "links oben rechts nach unten" -Systemen enthalten kann Richtungen.Um dies zu vermeiden, würde ich vorschlagen, das Quadrat, auf dem der "Spieler" steht, auf eine Wand zu setzen, so dass der Spieler nicht zurück zu ihm gehen kann, um unendliche Schleifen zu vermeiden. – Ultimater
können Sie das Labyrinth fluten und versuchen, die 'erreichbaren Felder' zu permutieren, um eine große Anzahl von möglichen Pfaden zu erstellen .... –