Ich verwende derzeit den A * Pathfinding-Algorithmus, um einen Pfad auf einem unendlichen Gitter zu berechnen (mit einem UnboundedGrid in Gridworld, der AP CS Fallstudie, wenn das irgendjemand hilft). Alles funktioniert wunderbar, außer in Fällen, in denen kein gültiger Pfad existiert, weil der Endknoten vollständig von Wänden umgeben ist. Wie erwartet, sucht der Algorithmus unendlich weiter und findet niemals den Endknoten.Wäre es akzeptabel, Grenzen um meine Pfadfinderzone zu legen?
Eine mögliche Lösung wäre, die Wände um den gesamten Pfadsuchbereich unsichtbar zu platzieren (wie der Benutzer sie nicht sieht, aber der Algorithmus tut dies) und stellt den Startknoten, den Endknoten und die gesamte Wand sicher Knoten befinden sich innerhalb dieser Wände, mit 2-3 Zwischenräumen. Etwas wie:
_________________________________
| |
| S | |
| _____| _____ |
| | E | |
| |___| |
|_______________________________|
... die Idee ist, dass schließlich alle Knoten werden dem closedlist hinzugefügt werden, wird die Openlist leer geworden, und an diesem Punkt werde ich wissen, dass kein gültiger Pfad vorhanden ist.
Scheint dies eine vernünftige Lösung für das Problem? Gibt es irgendwelche Möglichkeiten, wie dies möglicherweise schiefgehen könnte? Ich verstehe, dass eine andere Lösung darin besteht, vom Ende her gleichzeitig rückwärts zu suchen, aber dies scheint möglicherweise teuer zu sein, insbesondere in Fällen, in denen der Endknoten nicht so eng umschlossen ist.
Dies ist eine Frage mit einer subjektiven Antwort. Stimmt es, das zu tun? In manchen Fällen ist es das, in anderen nicht. Hängt von den Einschränkungen des Projekts ab. Musst du einen Weg finden? Wenn ja, bekommst du Situationen wie oben und solltest du sie lösen können, indem du sagst, dass es keinen Weg gibt? Wenn ja, dann brauchen Sie eine Art von Einschränkung. Wenn nicht, gut, du nicht :). – bastijn
Der Benutzer kann die Umgebung so einrichten, wie sie wollen, also ja, ich muss in der Lage sein, mit schlechten Wegen umzugehen. Die gleichzeitige Navigation von beiden Seiten scheint/ich bin davon überzeugt, dass dies wahrscheinlich der beste Weg ist, dies zu tun, obwohl ich meinen Code ein wenig umgestalten muss, um ihn zum Laufen zu bringen. Naja: D – Lewis