Logo Kürzeste Wege in Graphen: Der Dijkstra-Algorithmus Technische Universität München
Einfacher Graph mit 4 Knoten.

Wie komme ich am günstigsten von links nach rechts?

Der Klassiker unter den Kürzeste-Wege-Algorithmen

Du würdest gerne wissen, ob du von München aus schneller in Köln bist, wenn du über Stuttgart fährst oder Würzburg fährst? Dann könnte der Dijkstra-Algorithmus hilfreich für dich sein! Mit diesem Algorithmus kannst du unter anderem in einem Graphen, dessen Kanten beispielsweise mit den Distanzen zwischen verschiedenen Städten beschriftet sind, den kürzesten Weg zwischen zwei Städten ermitteln. Aber auch der kürzeste Weg von einer Stadt aus zu allen anderen Städten lässt sich mit dem Dijkstra-Algorithmus leicht bestimmen. Natürlich können die Kantenbeschriftungen auch etwas anderes repräsentieren, wie zum Beispiel die Mautkosten auf den Autobahnen zwischen den Städten.

Wichtig beim Dijkstra-Algorithmus ist, dass die Kantenkosten (so nennt man die Kantenbeschriftungen im Allgemeinen) nicht negativ sein dürfen.

Hier wird der Dijkstra-Algorithmus vorgestellt, der günstigste Wege bei nicht-negativen Kosten berechnet.

Was möchtest du zuerst tun?

SVG Download

Legende

Knoten Knoten
Knoten Kante mit Gewicht 50

Legende

Auf welchem Graph soll der Algorithmus ausgeführt werden?

Nimm ein fertiges Beispiel!

Ändere den Graphen nach deinen Vorstellungen:

  • Um einen Knoten zu erstellen, mache einen Doppelklick in das Zeichenfeld.
  • Um eine Kante zu erstellen, klicke zunächst auf den Ausgangsknoten und dann auf den Zielknoten.
  • Das Kantengewicht kann mit einem Doppelklick auf die Kante verändert werden.
  • Ein Rechtsklick löscht Kanten und Knoten.

Lade den veränderten Graphen herunter:

Download

Lade einen existierenden Graphen hoch:

Ein

trat auf beim Lesen der Datei:

Fehlerbeschreibung:

                    

Was nun?

SVG Download

Legende

Start Knoten Startknoten, von dem aus die Entfernungen und günstigsten Wege berechnet werden.
Aktueller Knoten Knoten, der gerade bearbeitet wird
Knoten in Warteschlange Knoten, der sich in der Warteschlange befindet
Knoten "Vorgängerkante", die der günstigste Weg zum Knoten benutzt.

Legende

Status des Algorithmus

BEGIN

d(v[1]) ← 0

FOR i = 2,..,n DO

d(v[i]) ← ∞, parent(v[i]) ← NULL

WHILE queue ≠ ∅ DO

u = queue.extractMin()

FOR ALL (u,w) ∈ E DO

dist ← d(u) + l(u,w)

IF w ∈ queue AND d(w) > dist DO

d(w) = dist, parent(w) = (u,w)

ELSE IF parent(w) == NULL THEN

d(w) = dist, parent(w) = (u,w)

queue.insert(w,dist)

END

Warteschlange:

Your browser does not support HTML5 Canvas. Please use a modern browser, i.e.Mozilla Firefox

Beim Wechsel des Tabs wird der Algorithmus abgebrochen.

Du kannst die Anwendung in einem anderen Browserfenster öffnen, um parallel einen anderen Tab zu lesen.

SVG Download

Legende

Start Knoten Startknoten, von dem aus die Entfernungen und günstigsten Wege berechnet werden.
Knoten in Warteschlange Knoten, der korrekt ausgewählt wurde

Legende

In welcher Reihenfolge werden die Knoten aus der Warteschlange entnommen?

Bei Wechsel des Tabs wird die Aufgabe beendet.

Du kannst ein weiteres Browserfenster öffnen, um gleichzeitig die Beschreibung zu lesen.

SVG Download

Legende

Knoten Startknoten, von dem aus die Entfernungen und günstigsten Wege berechnet werden.
Knoten in Warteschlange Kante, für die die richtigen Kosten gewählt wurden
Knoten Kante, für die falsche Kosten eingetragen wurden.

Legende

Welche Kosten haben die Kanten?

Entfernungen der Knoten:

Start b c d e f g h i
Initiali-
sierung
0
1. Schritt 3 2 4 34
2. Schritt 14
3. Schritt 12 13
4. Schritt 6 8
5. Schritt 12 7
6. Schritt 8 37
7. Schritt 36
8. Schritt 35
9. Schritt 35

Welche Kosten haben die Kanten?

Hier siehst du in einer Tabelle, welche Entfernungen die Knoten zum Startknoten in welcher Runde haben. Allerdings sind nicht alle Felder ausgefüllt.

Kannst du herausfinden, welche Kosten die Kanten haben? Klicke einfach doppelt auf eine Kante im Zeichenbereich und trage die Kosten ein, die diese Kante haben muss.

Beim Wechsel des Tabs wird die Aufgabe abgebrochen.

Du kannst die Anwendung in einem anderen Browserfenster öffnen, um parallel einen anderen Tab zu lesen.

SVG Download

Legende

Start Knoten Startknoten, von dem aus die Entfernungen und günstigsten Wege berechnet werden.
Aktueller Knoten Knoten, der gerade bearbeitet wird
Knoten in Warteschlange Knoten, der sich in der Warteschlange befindet
Knoten "Vorgängerkante", die der günstigste Weg zum Knoten benutzt.

Legende

Überprüfe dein Wissen: Wie würde der Algorithmus entscheiden?

BEGIN

d(v[1]) ← 0

FOR i = 2,..,n DO

d(v[i]) ← ∞, parent(v[i]) ← NULL

WHILE queue ≠ ∅ DO

u = queue.extractMin()

FOR ALL (u,w) ∈ E DO

dist ← d(u) + l(u,w)

IF w ∈ queue AND d(w) > dist DO

d(w) = dist, parent(w) = (u,w)

ELSE IF parent(w) == NULL THEN

d(w) = dist, parent(w) = (u,w)

queue.insert(w,dist)

END

Beim Wechsel des Tabs wird der Algorithmus abgebrochen.

Du kannst die Anwendung in einem anderen Browserfenster öffnen, um parallel einen anderen Tab zu lesen.