2016-07-03 31 views
3

Ich versuche derzeit, ein GPS-System zu erstellen, das Kartendaten aufnehmen und den kürzesten Abstand zwischen dem Startpunkt und dem Endpunkt in der kürzesten Entfernung finden kann.Implementieren von offenen und geschlossenen Liste für A * -Algorithmus auf einem GPS

Das Programm übernimmt Eckpunkte (die jeweils ein Label sowie X- und Y-Koordinaten enthalten) und Kanten (die zu und von welchen Straßen detailliert sind sowie die Entfernung), die dann in einer Adjazenzliste gespeichert werden.

Ich habe mich entschieden, den A * -Algorithmus zu verwenden und habe versucht, dieser introduction zu folgen, aber ich bin unsicher, wie die offenen und geschlossenen Listen implementiert werden sollen. Würde ein einfacher Vektor ausreichen oder müsste ich etwas anderes wie eine Prioritätswarteschlange verwenden?

Antwort

3

Die offene Liste wird hier verwendet, um den nächstbesten oder kürzesten Pfad zu erhalten. Daher könnten Sie eine Prioritätswarteschlange dafür verwenden.

Die geschlossene Liste ist nur zum Verwerfen der Quadrate, die Sie nicht weiter verwenden möchten, Sie können die geschlossene Liste mithilfe einer Hashtabelle implementieren, so dass Sie finden können, ob dieses Quadrat in O (1) verworfen wird.

+0

Vielen Dank für die gute Antwort, aber ich habe versucht, eine Hash-Karte vorher zu machen, und ich bin derzeit schrecklich darin. Ich möchte nur, dass dieses System funktioniert und es später verbessert. Sind die offenen und geschlossenen Listen mit Vektoren möglich? – StonerLoods

+1

Ja, sie können beide mit Vektoren gemacht werden, Sie müssen den "offenen Vektor" durchqueren und den kürzesten Pfad finden, in ähnlicher Weise wird das Traversieren von "geschlossenem Vektor" auch benötigt, um nach verworfenem Quadrat zu suchen. – uSeemSurprised