Hi, ich muss mit dem Dijkstra-Algorithmus arbeiten. Es handelt sich hierbei um einen Algorithmus, der die kürzeste Strecke einer Route bestimmt. Siehe auch: http://n.ethz.ch/student/stammt/doc/Algorithmen/Dijkstra.html
Ich habmich damit beschäftig, verstehe ihn auch und versuche ihn gerade in mein Programm einzubauen.
Hab mir hierfür den Methodenaufbau überlegt:
Soweit so gut, hab alle Methoden, die ich dafür brauche geschrieben, als da wären:
Jetzt mein Problem:
Ich arbeite ja mit dem Datentyp Node. Ist einfach nen Datentyp, der einen Punkt auf einer Karte darstellt.
Das Problem ist nur, dass der Dijkstra-Algorithmus mehr als diesen Datentyp braucht.
Wer sich damit auskennt oder den Link oben studiert wird feststellen, dass ich neben der aktuellen Node auch die VorgängerNode und den Abstand zwischen den Nodes (als Zeiteinheit) abspeichern muss.
Mein Ansatz war nun einen Datentyp DijkstraNode zu erschaffen, der 2 Typen Nodes und eine Integer-Zahl beinhaltet.
Sprich Node aktuelleNode = new Node() , VorgaengerNode und int Abstand;
Aber wie gehe ich damit um? Ich komm keinen Schritt weiter bei der Handhabung dieses neuen Datentyps.
Sofern irgendwer versteht, was ich hier zusammenposte , wäre ich super dankbar, wenn er mir da helfen könnte.
Ich habmich damit beschäftig, verstehe ihn auch und versuche ihn gerade in mein Programm einzubauen.
Hab mir hierfür den Methodenaufbau überlegt:
DijkstraSuche(Startnode, Endnode)
{
Ereignisliste.add(Startnode)
do
{
tempNode = erstes Element der Ereignisliste setzen
********************************************************
getconnectedNode(erste Node in Ereignisliste) //gibt den Vector "connected" mit allen verbundenen Nodes zurück
********************************************************
"connected" mit vector "bereits_besucht" vergleichen //"bereits_besucht" ist anfangs leer
und gleiche Einträge aus "connected" löschen
********************************************************
erstes Element aus "Ereignisliste" in "bereits_
besucht" schreiben und aus ersterer löschen
********************************************************
Element aus "connected" in die Ereignis-
liste anfügen (mit Datentyp DijkstraNode):
prüfen:
If (Element aus connected in Ereignisliste vorhanden)
& (connected.Element.Zeit < Ereignisliste.Element.Zeit)
{
überschreibe Element
Setze VorgängerNode = tempNode
}
If (Element aus connected in Ereignisliste vorhanden)
& (connected.Element.Zeit >= Ereignisliste.Element.Zeit)
{
nichts
}
If (Element aus connected nicht in Ereignisliste vorhanden)
{
Schreibe connected.Element in Ereignisliste
Setze VorgängerNode = tempNode
}
********************************************************
}
while (Ereignisliste != leer);
}
Soweit so gut, hab alle Methoden, die ich dafür brauche geschrieben, als da wären:
Code:
public int getDistance(Node node1, Node node2)
public Vector VectorVergleich(Vector v_vergleichen, Vector v_zuvergleichen)
public boolean TestVector(Vector vector,Node node)
public Vector getConnectedNode(Node node)
Jetzt mein Problem:
Ich arbeite ja mit dem Datentyp Node. Ist einfach nen Datentyp, der einen Punkt auf einer Karte darstellt.
Das Problem ist nur, dass der Dijkstra-Algorithmus mehr als diesen Datentyp braucht.
Wer sich damit auskennt oder den Link oben studiert wird feststellen, dass ich neben der aktuellen Node auch die VorgängerNode und den Abstand zwischen den Nodes (als Zeiteinheit) abspeichern muss.
Mein Ansatz war nun einen Datentyp DijkstraNode zu erschaffen, der 2 Typen Nodes und eine Integer-Zahl beinhaltet.
Sprich Node aktuelleNode = new Node() , VorgaengerNode und int Abstand;
Aber wie gehe ich damit um? Ich komm keinen Schritt weiter bei der Handhabung dieses neuen Datentyps.
Sofern irgendwer versteht, was ich hier zusammenposte , wäre ich super dankbar, wenn er mir da helfen könnte.