Wie finden Sie den Anfang und das Ende eines Labyrinths mit rekursivem Backtracking? Es scheint, als wäre es schwer, es herauszufinden, wie das Labyrinth nie ends
. Wäre es der Punkt, an dem Sie zuerst mit dem Zurückverfolgen beginnen? Der Startpunkt könnte sein, wo Sie anfangen, aber manchmal gibt es einen besseren Ort.Wie finden Sie den Anfang und das Ende eines rekursiven Backtracking-Labyrinths?
Antwort
Wenn Sie erzeugen ein Labyrinth mit rekursiven Rückzieher wie folgt aus:
http://weblog.jamisbuck.org/2010/12/27/maze-generation-recursive-backtracking
dann alle Zellen verbunden sind, und es gibt genau einen Weg zwischen zwei Zellen zu reisen, ohne Ihre Schritte zurückzuverfolgen.
Sie können beliebige Start- und Endpunkte auswählen, die Sie mögen!
Beachten Sie, dass ein Graph, der wie die Labyrinth-Zellen verbunden ist, d. H., So dass es genau einen Pfad von jedem Knoten zu jedem anderen Knoten gibt, ein ungerichteter Baum ist. Wenn Sie die beiden am weitesten entfernten Punkte finden möchten, damit Sie sie als Start- und Endpunkt verwenden können, müssen Sie den Durchmesser dieses Baumes finden.
Es gibt viele Möglichkeiten, dies zu tun, aber die einfachste ist:
1) Wählen Sie einen zufälligen Scheitelpunkt an, zu starten und BFS verwenden Sie die/eine Ecke zu finden, die am weitesten von ihm ist. Das wird dein Startpunkt sein.
2) Verwenden Sie BFS, um den Scheitelpunkt zu finden, der am weitesten vom Startscheitelpunkt entfernt ist. Das ist dein Endpunkt.
Die Start- und Endpunkte werden so weit wie möglich auseinander liegen.
Die Antwort auf diese Frage erklärt, warum das immer funktioniert: Proof of correctness: Algorithm for diameter of a tree in graph theory
Beachten Sie, dass die Punkte, die am weitesten voneinander entfernt sind, sind nicht notwendigerweise an den Rändern. Ich finde, dass die Auswahl zufälliger Punkte an den Kanten funktioniert, wenn Sie das brauchen: https://mtimmerm.github.io/webStuff/maze.html
Ich möchte die Stellen finden, an denen die Entfernung am größten ist, also am härtesten. – lol
@lol, OK, ich habe Sachen dafür hinzugefügt –
- 1. Den Anfang und das Ende eines Teilstrings finden mit regex
- 2. So finden Sie Anfang und Ende einer Zeichenfolge
- 3. Finden Sie die Züge zwischen Anfang und Ende
- 4. Wie man den Anfang und das Ende eines Ausdrucks mit grep in R
- 5. R - Finden Sie den Anfang und Ende des Zeitstempels gemäß mit Werten in einer anderen Spalte
- 6. Postgresql:% an den Anfang und das Ende eines Array-Elements anhängen
- 7. Wie doppelte Anführungszeichen am Anfang und das Ende einer Zeichenfolge
- 8. Alle Teilstrings mit demselben Anfang und Ende
- 9. Fügen Sie "an den Anfang und" an das Ende jeder Zelle Daten
- 10. Lokalisieren Sie das Ende eines XZ-Streams
- 11. Zeichen am Anfang und am Ende eines Strings hinzufügen?
- 12. Finden gzip Start und Ende?
- 13. Alternate Hinzufügen eines Zeichens am Anfang und Ende der Zeichenfolge
- 14. Wie kann ich den Anfang und das Ende in Pythons Regex anpassen?
- 15. So finden und überspringen Sie Sonderzeichen am Anfang und Ende des Wortes
- 16. AngularJS Holen Sie sich Textauswahl und hängen Sie HTML an den Anfang und das Ende der Auswahl an
- 17. Hinzufügen eines Zeichens am Anfang und Ende einer Zeichenfolge
- 18. bearbeiten Anfang und das Ende einer großen Datei
- 19. Regex Stripping Anfang und Ende der Zeichenfolge
- 20. Regulärer Ausdruck für das Finden mit Anfang und Ende mit einem Zitat oder mehreren Anführungszeichen
- 21. Anfang und Ende Datumsunterschied in PHP
- 22. Regex Anfang bis Ende
- 23. Finden Sie das Ende des Monats Pandas DataFrame Series
- 24. Wie Anfang und Ende der Satzmarker mit Quantea
- 25. Wie entferne ich das Ende eines NSMutableString?
- 26. So entfernen Sie Marker von DirectionsRenderer Anfang und Ende
- 27. Was bedeutet "Umbruch zum Anfang, wenn das Ende erreicht ist"?
- 28. Aufzeichnungstyp rekursiven Elementfunktionen und das „rec“ Stichwort
- 29. Holen Sie sich das Ende eines Arrays
- 30. Javascript Regex, Match Anfang des Satzes, das Ende und den Rest verwerfen?
Sie können eine maximale Anzahl von Schritten definieren und diese Anzahl erhöhen, nachdem jede Kombination gefunden wurde. –