Dijkstra Algorithmus initialisieren

gamma21

Mitglied
Ich möchte den Djikstra Algorithmus verwenden um den kürzesten Weg in einem Graph zu finden.
Ich habe bereits Funktionen die mir die Koordinaten der jeweiligen Knoten zurück gibt so wie eine Funktion die mir die Gewichtung der Kanten (der euklidische Abstand) zurück gibt. Eine ArrayList gibt mir die ID der Nachbarknoten zurück und ein eine Funktion die Anzahl der Knoten.
So weit so gut.
Im ersten Schritt des Djikstra Algorithmus werden ja nun alle Abstände zum Startknoten auf unendlich gesetzt.
Code:
public static double dijkstra(Graph G, Integer o, Integer p, ArrayList<Integer> Queue Q) {
        
        for(int i = 1; i<G.Knotenanzahl;i++)
        {

            G.weight(o,i) = 9999999;
        }
            }
}
Ich bekomme nun die Fehlermeldung:
Error: unexpected type required: variable found: value
Warum kann ich auf diese Art keinen Wert zuweißen?
 

Robat

Top Contributor
Weil weight nunmal einen Wert zurück gibt und keine Variable im eigentlichen Sinne.
Schreib dir lieber eine Methode um den Wert zu setzen (Setter). Sowas wie g.setWeight(i,o,99999);
 

JCODA

Top Contributor
Zudem ist deine Parameterliste etwas durcheinander gekommen, immer Typ, dann ein Bezeichner, soll Q vom Typ Queue oder Arraylist sein?
 

gamma21

Mitglied
Schreib dir lieber eine Methode um den Wert zu setzen
Die Funktionen sind alle gegeben, d.h ich kann diese nicht verändern. weight besitzt scheinbar keine Setter Methode, jedoch die ArrayList<Integer>Nachbarknoten(int v). Diese retourniert eine Liste von IDs der Nachbarknoten. Kann ich darüber die Distanz der Nachbarknoten auf unendlich setzten?
Code:
for(int i = 1; i<G.Knotenzahl()-1;i++)
        {
        G.Nachbarknoten(i).set(9999,i);
        }
        return 0.0;
    }
Dies würde ja nur die ID ändern, jedoch nicht den Abstand.
Seht ihr das auch so?
soll Q vom Typ Queue oder Arraylist sein?
Q soll vom Typ Queue sein.
 

gamma21

Mitglied
Nun mal angenommen, ich hätte die Distanz somit auf unendlich gesetzt, weiß ich nun nicht mehr wie es weiter gehen soll:
Code:
while(!Q.istleer())
        {
            int x = Q.entferneMin();
            for(int i = 1; i<G.Knotenzahl()-1;i++)
            {
                if(G.enthältKanten(o,i))
                {
                    Q.add(i,G.weight(o,i));
                }
            }
        }
Nun habe ich allerdings nur das Gewicht der Kante in meine Queue aufgenommen, nicht den Knoten selbst. Wie kann ich also diesen in die Queue aufnehmen oder ist das gar nicht notwendig?
 

Ähnliche Java Themen

Neue Themen


Oben