Kürzester Pfad unter Verwendung des Dijkstra-Algorithmus

8

Ich reaktiviere gerade eine alte Hausaufgabe, in der ich ein Programm schreibe, das unter anderem die Suche nach dem kürzesten Pfad in einem Graphen mit Dijkstras Algorithmus beinhaltet.

Ich denke, ich habe es größtenteils richtig gemacht, aber ich bekomme immer NullPointerException in Zeile 58, wenn if(currentNode.getAktuell()) ausgeführt wird.

Ich habe mehrere Lösungen hin und her versucht, aber ich kann nicht herausfinden, was falsch ist, aber prioQueue.poll(); gibt null zurück, wenn die Warteschlange leer ist. Ich habe versucht, mit der letzten currentNode umzugehen, die irgendwann zu null wird, aber ich konnte keine funktionierende Lösung finden, daher denke ich, dass ich hier etwas verpasst habe.

Ich würde es sehr schätzen, wenn mir jemand, der mit dem Algorithmus von Dijkstras vertraut ist, helfen könnte. Es gibt wahrscheinlich eine bessere Lösung für den Algorithmus, aber ich möchte nur Hilfe beim Herausfinden, was mit dem, was ich geschrieben habe, falsch ist und nicht "die Antwort" mit dem Algorithmus eines anderen.

%Vor%

Hier ist meine listEdge-Klasse:

%Vor%

Dies sollten die relevanten Methoden aus meiner ListGraph-Klasse sein:

%Vor%     
John Snow 05.07.2011, 15:33
quelle

3 Antworten

3

Ich konnte die NullPointerException, von der Sie uns erzählt haben, nicht rekonstruieren. Wie Leandro darauf hingewiesen hat, könnte das Problem bei der Implementierung von ListEdge und Graph liegen.

Ich habe eine Implementierung beider Klassen selbst gemacht, um Ihren Code zu testen.

Das einzige Problem, das ich finden konnte, war am Ende, wo Sie die Ergebnisliste erstellen:

%Vor%

Dies führt immer zu NullPointerException , weil get() einen Schlüssel erwartet und in Ihrem Fall ist das ein String , kein int . Um über die Map zu iterieren, benutze etwas wie

%Vor%

Außerdem gehe ich davon aus, dass Sie den tatsächlichen Pfad von from nach to zurückgeben möchten. Sie müssten also einen Getter getFrån() zu DijkstraObjekt hinzufügen und dann die Liste wie folgt aufbauen:

%Vor%

Danach enthält die Liste den vollständigen Pfad (einschließlich Start- und Endknoten) in umgekehrter Reihenfolge.

Wenn gewünscht, kann ich alle meine Klassen zum Testen / Debuggen posten.

Prost Tannerli

    
tannerli 05.08.2011, 09:15
quelle
0

Ich denke, das könnte ein Problem sein:

%Vor%

BEARBEITEN:

Tut mir leid, ich dachte, die {} wäre da. Alles ist in Ordnung. Ich werde weiter schauen.

    
Zoltan Balazs 05.07.2011 15:48
quelle
0

Vielleicht versuchen Sie das:

%Vor%     
Jason 05.07.2011 18:36
quelle

Tags und Links