Moin moin,
vielleicht sehr ihr ja etwas, was ich nicht sehe. Ich bin dabei, den Dijkstra-Algorithmus zu implementieren. Dazu habe ich u.a. zwei Listen. Die eine (prioritaetswarteschlange) speichert alle Knoten, die Vorgänger und (hier wichtig) das Pfadgewicht. Die andere (moeglicheKnoten) speichert in diesem Schritt alle Knoten, die von dem, an dem momentan steht, erreichen kann. Das Problem: ich verändere in moeglicheKnoten das Pfadgewicht (ursprünglich stand das alles mal ohne Hilfsvariablen in einer Zeile ohne h und o), es wird aber auch in prioritaetswarteschlange verändert. Hier der mittlerweile ziemlich zerstückelte Code:
Davor ist noch eine for-Schleife, die aber jetzt irrelevant ist. Bei "a" + prioritaets... ist der Wert noch richtig, nämlich der maximale Wert eines Integers. Danach (bei "b") ist der falsche Wert gespeichert. Zudem sei gesagt, dass dies nur beim letzten Durchlauf der Schleife passiert, davor ist alles so, wie es sein soll. Ich weiß, der Code ist mittlerweile nicht mehr so einfach zu lesen, aber vielleicht findet jemand ja was
vielleicht sehr ihr ja etwas, was ich nicht sehe. Ich bin dabei, den Dijkstra-Algorithmus zu implementieren. Dazu habe ich u.a. zwei Listen. Die eine (prioritaetswarteschlange) speichert alle Knoten, die Vorgänger und (hier wichtig) das Pfadgewicht. Die andere (moeglicheKnoten) speichert in diesem Schritt alle Knoten, die von dem, an dem momentan steht, erreichen kann. Das Problem: ich verändere in moeglicheKnoten das Pfadgewicht (ursprünglich stand das alles mal ohne Hilfsvariablen in einer Zeile ohne h und o), es wird aber auch in prioritaetswarteschlange verändert. Hier der mittlerweile ziemlich zerstückelte Code:
Java:
for(int j=0; j<prioritaetswarteschlange.size(); j++) {
System.out.println("j" + j);
if(prioritaetswarteschlange.get(j).getKnotennummer() == i) {
moeglicheKnoten.add(prioritaetswarteschlange.get(j));
System.out.println("a" + prioritaetswarteschlange.get(3).getPfadgewicht());
int h = moeglicheKnoten.size()-1;
int o = adjazenzmatrix[prioritaetswarteschlange.get(0).getKnotennummer()][i];
moeglicheKnoten.get(h).setPfadgewicht(o);
System.out.println("b" + prioritaetswarteschlange.get(3).getPfadgewicht());
System.out.println("c" + prioritaetswarteschlange.get(3).getPfadgewicht());
}
Davor ist noch eine for-Schleife, die aber jetzt irrelevant ist. Bei "a" + prioritaets... ist der Wert noch richtig, nämlich der maximale Wert eines Integers. Danach (bei "b") ist der falsche Wert gespeichert. Zudem sei gesagt, dass dies nur beim letzten Durchlauf der Schleife passiert, davor ist alles so, wie es sein soll. Ich weiß, der Code ist mittlerweile nicht mehr so einfach zu lesen, aber vielleicht findet jemand ja was
Zuletzt bearbeitet: