Finden Sie den kürzesten Weg in einem Labyrinth

Google Translate Icon

Angenommen Matze Finden Sie in Form einer binären rechteckigen Matrix die kürzeste Weglänge im Labyrinth von einer bestimmten Quelle zu einem bestimmten Ziel. Der Pfad kann nur aus Zellen mit dem Wert 1 konstruiert werden, und wir können uns in jedem Moment nur einen Schritt in eine der vier Richtungen bewegen.

Die gültigen Züge sind:

Go Top: (x, y) ——> (x – 1, y)
Go Left: (x, y) ——> (x, y – 1)
Go Down: (x, y) ——> (x + 1, y)
Go Right: (x, y) ——> (x, y + 1)

 
Betrachten Sie beispielsweise die folgende binäre Matrix. Wenn Quelle = (0, 0) und Ziel = (7, 5), hat der kürzeste Weg von der Quelle zum Ziel die Länge 12.


1  1  1  1  1  0  0  1  1  1 ]
[ 0  1  1  1  1  1  0  1  0  1 ]
[ 0  0  1  0  1  1  1  0  0  1 ]
[ 1  0  1  1  1  0  1  1  0  1 ]
[ 0  0  0  1  0  0  0  1  0  1 ]
[ 1  0  1  1  1  0  0  1  1  0 ]
[ 0  0  0  0  1  0  0  1  0  1 ]
[ 0  1  1  1  1  1  1  1  0  0 ]
[ 1  1  1  1  1  0  0  1  1  1 ]
[ 0  0  1  0  0  1  1  0  0  1 ]

Üben Sie dieses Problem

 
Um den kürzesten Weg des Labyrinths zu finden, suchen Sie alle möglichen Wege im Labyrinth von der Startposition bis zur Zielposition, bis alle Möglichkeiten erschöpft sind. Wir können dies leicht mit Hilfe von erreichen backtracking. Die Idee ist, von der gegebenen Quellzelle in der Matrix auszugehen und alle vier möglichen Pfade zu erkunden und rekursiv zu prüfen, ob sie zum Ziel führen oder nicht. Aktualisieren Sie dann die minimale Pfadlänge, wann immer die Zielzelle erreicht wird. Wenn ein Pfad das Ziel nicht erreicht oder alle möglichen Routen von der aktuellen Zelle aus erkundet hat, gehen Sie zurück. Um sicherzustellen, dass der Pfad einfach ist und keine Zyklen enthält, verfolgen Sie die am aktuellen Pfad beteiligten Zellen in einer Matrix, und ignorieren Sie die Zelle, bevor Sie eine Zelle untersuchen, wenn sie bereits im aktuellen Pfad enthalten ist.

Es folgt die C++-, Java- und Python-Implementierung der Idee:

C++


Herunterladen  Code ausführen

Ergebnis:

The shortest path from source to destination has length 12

Java


Herunterladen  Code ausführen

Ergebnis:

The shortest path from source to destination has length 12

Python


Herunterladen  Code ausführen

Ergebnis:

The shortest path from source to destination has length 12

Die zeitliche Komplexität der obigen Backtracking-Lösung wird höher sein, da alle Pfade zurückgelegt werden müssen. Da es sich jedoch um das Kürzeste-Wege-Problem handelt, Breitensuche (BFS) wäre eine ideale Wahl. Wenn BFS zur Lösung dieses Problems eingesetzt wird, reisen wir Ebene für Ebene. Das erste Auftreten des Zielknotens liefert uns also das Ergebnis, und wir können unsere Suche dort beenden. Der BFS-Ansatz wird diskutiert hier.

Bewerte diese Nachricht

Durchschnittliche Bewertung 4.85/5. Stimmenzahl: 206

Bisher keine Stimmen! Seien Sie der Erste, der diesen Beitrag bewertet.

Es tut uns leid, dass dieser Beitrag für Sie nicht hilfreich war!

Sagen Sie uns, wie wir diesen Beitrag verbessern können?




Danke fürs Lesen.

Bitte nutzen Sie unsere Online-Compiler um Code in Kommentaren mit C, C++, Java, Python, JavaScript, C#, PHP und vielen weiteren gängigen Programmiersprachen zu posten.

Wie wir? Empfehlen Sie uns Ihren Freunden und helfen Sie uns zu wachsen. Viel Spaß beim Codieren :)



Abonnieren
Benachrichtigen von
guest
20 Kommentare
Am meisten gewählt
Neueste Älteste
Inline-Feedbacks
Alle Kommentare anzeigen
Folgen Sie diesem Link NICHT, sonst werden Sie von der Seite ausgeschlossen!