Djikstra Algorithmus

OP #5039073
Hallo,
ich möchte ein Programm schreiben, der eine 2D-Matrix (Start = 1; Ziel: 
0; Platz: 2; Hinderniss: -1) als Input nimmt und nach dem Djikstra 
Algorithmus die optimale Route berechnet und als Output einen 
2x1-Matrix ausgibt mit dem optimalen Weg.
Das Programm möchte ich mit MATLAB nutzen.

Es gibt viele Dateien im Internet, jedoch nutzen alle Knoten und einen 
Graphen. Wenn ich beispielsweise einen Code mit Matrizen finde, dann ist 
der mit verschiedenen Zahlen beschriftet.

Nun zu meiner Frage:
Wie genau kann ich den Code umschreiben, um den gewünschten Input, 
Output zu bekommen und die gewünschte Matrix zu verwenden.

Danke.
Kai S. schrieb:
> Wie genau kann ich den Code umschreiben, um den gewünschten Input,
> Output zu bekommen und die gewünschte Matrix zu verwenden.

Ein Graph besteht aus Knoten und Kanten.

Angenommen: In einer Matrix sind die indizierten Elemente die Knoten; 
die Kanten sind die Übergänge zu den Nachbarelementen. Dann wäre die 
Transformation von der Matrix zum Graphen einfach, richtig?

In deiner Matrix sind hingegen nur diejenigen Elemente auch Knoten, die 
mit 0,1,2 markiert sind. Wie sieht hier dein Lösungsansatz aus?
Zum ersten Mal vom "Lee-Algorithmus" gehört. ;-)
1
REPEAT
2
     - Mark all unlabeled neighbors of points marked with i with i+1

Da geht irgendwo verloren, dass man (genauso wie bei der Breitensuche) 
eine Queue benötigt, in der man die Trackingpoints speichert (oder man 
erhöht die Komplexität "etwas" und durchsucht in jedem Durchgang alle 
Elemente ;-).

Wenn es wirklich um ein Maze geht, wird man aber sowieso besser von 
beiden Enden aus suchen (falls Komplexität wichtig sein sollte).

Soll es allgemein sein (also Dijkstra wie vom TS geschrieben) dann kann 
man solche Matrix-Elemente mit lediglich zwei Nachbarn als Teil einer 
gewichteten Kante betrachten, was die Knotenmenge erheblich reduzieren 
kann.

Führt aber alles wohl zu weit: Ich haben den Eindruck der TS ist noch 
dabei sich mit dem Konzept Graph/Knoten/Kanten vertraut zu machen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.