Tiefensuche DFS(G) 1. for each vertex u∈V do color[u] ← WHITE ; π[u] ← nil 2. time ← 0 3. for each vertex u∈V do 4. if color[u]=WHITE then DFS-Visit(u) DFS-Visit(u) 1. color[u] ← GRAY 2. time ← time +1; d[u] ← time 4. for each v∈Adj[u] do 5. if color[v] = WHITE then π[v] ← u ; DFS-Visit(v) 6. color[u] ← BLACK 7. time ← time+1; f[u] ← time SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 1 Tiefensuche Satz 14.8 (Klammersatz zur Tiefensuche): In jeder Tiefensuche eines gerichteten oder ungerichteten Graphen gilt für jeden Knoten u und v genau eine der folgenden drei Bedingungen: • Die Intervalle [d[u],f[u]] und [d[v],f[v]] sind vollständig disjunkt • Intervall [d[u],f[u]] ist vollständig im Interval [d[v],f[v]] enthalten und u ist Nachfolger von v im DFS-Baum • Intervall [d[v],f[v]] ist vollständig im Interval [d[u],f[u]] enthalten und v ist Nachfolger von u im DFS-Baum SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 2 Tiefensuche Beispiel: a 1 12 b c 9 10 11 2 d e 3 4 5 f 8 b a SS 2008 2 12 c Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen e 3 7 6 1 6 7 9 4 11 8 10 5 d 3 f Tiefensuche Beispiel: a 1 12 b c 9 10 11 2 d e 3 4 5 f 8 b a 2 12 c Korollar 14.9: e 3 7 6 1 6 7 9 4 11 8 10 5 d Knoten v ist echter Nachfolger von Knoten u im DFS-Baum von G, gdw. d[u]<d[v]<f[v]<f[u]. SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 4 f Tiefensuche Satz 14.10 (Satz vom weißen Weg) In einem DFS-Wald eines gerichteten oder ungerichteten Graph G ist Knoten v ein Nachfolger von Knoten u, gdw. zum Zeitpunkt d[u] v über einen Pfad weißer Knoten erreicht werden kann. u 2 v 1 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 5 Tiefensuche - Laufzeitanalyse Satz 14.11: Bei Eingabe von Graph G=(V,E) besitzt Algorithmus DFS Laufzeit O ( V + E ). Analyse: Wie bei Breitensuche. Nutzen aus dass Gesamtgröße aller Adjazenzlisten O (E ) SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 6 Tiefensuche Klassifikation von Kanten: • Baumkanten sind Kanten des DFS-Walds G • Rückwartskanten sind Kanten (u,v), die Knoten u mit Ahnen von u im DFS-Baum verbinden • Vorwärtskanten sind die nicht-Baum Kanten (u,v), die u Rückwärtskante mit einem Nachfolger v in einem DFS-Baum verbinden 4 • Kreuzungskanten sind alle übrigen Kanten b a 2 12 e 3 7 6 1 c SS 2008 9 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 11 8 10 5 d 7 Tiefensuche Klassifikation von Kanten: • Baumkanten sind Kanten des DFS-Walds G • Rückwartskanten sind Kanten (u,v), die Knoten u mit Ahnen von u im DFS-Baum verbinden • Vorwärtskanten sind die nicht-Baum Kanten (u,v), die u mit einem Nachfolger v in einem DFS-Baum verbinden 4 • Kreuzungskanten sind alle übrigen Kanten Vorwärtskante b a 2 12 e 3 7 6 1 c SS 2008 9 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 11 8 10 5 d 8 Tiefensuche Klassifikation von Kanten: • Baumkanten sind Kanten des DFS-Walds G • Rückwartskanten sind Kanten (u,v), die Knoten u mit Ahnen von u im DFS-Baum verbinden • Vorwärtskanten sind die nicht-Baum Kanten (u,v), die u mit einem Nachfolger v in einem DFS-Baum verbinden 4 • Kreuzungskanten sind alle übrigen Kanten 9 a 12 b 3 Kreuzungskante 2 7 6 1 c SS 2008 e Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 11 8 10 5 d 9 Tiefensuche In einem ungerichteten Graphen ist jede Kante eine Baum- oder Rückwärtskante SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 10 Tiefensuche • Topologisches Sortieren • Sortierung eines gerichteten, kreisfreien Graphen, so dass für jede Kante (u,v) u in der Sortierung vor v steht („u wird vor v ausgewertet“) SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 11 Tiefensuche Topsort(G) 1. Rufe DFS(G) auf, um Zeitstempel f[v] für jeden Knoten v zu berechnen 2. Sobald ein Knoten abgearbeitet ist, füge ihn zu Beginn einer Liste L ein (absteigende Sortierung nach f[v]Werten) 4 3. return L b Sortierung im Beispiel: • a, c, b, d, f, e Laufzeit: • Θ(|V|+|E|) SS 2008 a 9 2 12 e 3 7 6 1 c 11 8 10 5 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen f d 12 Tiefensuche Lemma 14.12: Ein gerichteter Graph G ist azyklisch, gdw. eine Tiefensuche in G keine Rückwärtskanten hat. SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 13 Tiefensuche Satz 14.13: TopSort(G) berechnet eine topologische Sortierung eines gerichteten azyklischen Graphs. SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 14 Tiefensuche Zusammenfassung: • Zwei grundlegende Graphalgorithmen: Breiten- und Tiefensuche • Breitensuche: zunächst alle Nachbarn abarbeiten; liefert kürzeste Wege in ungewichteten Graphen; Laufzeit O(|V|+|E|) • Tiefensuche: zunächst in die Tiefe gehen; durchläuft alle Knoten eines Graphen in O(|V|+|E|) Zeit; kann für topologische Sortierung verwendet werden SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 15 Kürzeste Wege Kürzeste Wege in gewichteten Graphen: • Kürzeste Wege von einem Startknoten (single source shortest path (SSSP)) • Kürzeste Wege für jedes Knotenpaar (all pairs shortest path (APSP)) • Nur positive Kantengewichte oder auch negative Gewichte erlaubt • δ(u,v) δ bezeichnet Länge des kürzesten Weges von u nach v (Summe der Kantengewichte) SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 16 Kürzeste Wege Single Source Shortest Path (SSSP): • Eingabe: Gewichteter Graph G=(V,E) und Startknoten s • Ausgabe: Für jeden Knoten u∈V seine Distanz zu s sowie einen kürzesten Weg 2 Zunächst Annahme: • Nur positive Kantengewichte 2 7 4 s 1 6 8 1 7 5 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 17 Kürzeste Wege Single Source Shortest Path (SSSP): • Eingabe: Gewichteter Graph G=(V,E) und Startknoten s • Ausgabe: Für jeden Knoten u∈V seine Distanz zu s sowie einen kürzesten Weg 2 Zunächst Annahme: • Nur positive Kantengewichte 2 7 4 s 1 6 8 1 7 5 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 18 Kürzeste Wege Single Source Shortest Path (SSSP): • Eingabe: Gewichteter Graph G=(V,E) und Startknoten s • Ausgabe: Für jeden Knoten u∈V seine Distanz zu s sowie einen kürzesten Weg 2 Zunächst Annahme: • Nur positive Kantengewichte 2 7 4 s 1 6 8 1 7 4 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 19 Kürzeste Wege Entwicklung eines einfachen Algorithmus für SSSP: • Beobachtung: Ähnlich wie BFS • Erste Idee: Nimm immer die kürzeste Kante, die zu noch nicht entdecktem Knoten führt 2 2 7 4 s 1 6 8 1 7 5 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 20 Kürzeste Wege Entwicklung eines einfachen Algorithmus für SSSP: • Beobachtung: Ähnlich wie BFS • Erste Idee: Nimm immer die kürzeste Kante, die zu noch nicht entdecktem Knoten führt 2 2 7 4 s 1 6 8 1 7 5 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 21 Kürzeste Wege Entwicklung eines einfachen Algorithmus für SSSP: • Beobachtung: Ähnlich wie BFS • Erste Idee: Nimm immer die kürzeste Kante, die zu noch nicht entdecktem Knoten führt 2 2 7 4 s 1 6 8 1 7 5 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 22 Kürzeste Wege Entwicklung eines einfachen Algorithmus für SSSP: • Beobachtung: Ähnlich wie BFS • Erste Idee: Nimm immer die kürzeste Kante, die zu noch nicht entdecktem Knoten führt 2 2 7 4 s 1 6 8 1 7 5 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 23 Kürzeste Wege Entwicklung eines einfachen Algorithmus für SSSP: • Beobachtung: Ähnlich wie BFS • Erste Idee: Nimm immer die kürzeste Kante, die zu noch nicht entdecktem Knoten führt 2 2 7 4 s 1 6 8 1 7 5 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 24 Kürzeste Wege Entwicklung eines einfachen Algorithmus für SSSP: • Beobachtung: Ähnlich wie BFS • Erste Idee: Nimm immer die kürzeste Kante, die zu noch nicht entdecktem Knoten führt 2 2 7 4 s 1 6 8 1 7 5 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 25 Kürzeste Wege Entwicklung eines einfachen Algorithmus für SSSP: • Beobachtung: Ähnlich wie BFS • Erste Idee: Nimm immer die kürzeste Kante, die zu noch nicht entdecktem Knoten führt 2 2 7 4 s 1 6 8 1 7 5 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 26 Kürzeste Wege Entwicklung eines einfachen Algorithmus für SSSP: • Beobachtung: Ähnlich wie BFS • Erste Idee: Nimm immer die kürzeste Kante, die zu noch nicht entdecktem Knoten führt 2 2 7 4 s 1 6 8 1 7 5 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 27 Kürzeste Wege Entwicklung eines einfachen Algorithmus für SSSP: • Beobachtung: Ähnlich wie BFS • Erste Idee: Nimm immer die kürzeste Kante, die zu noch nicht entdecktem Knoten führt 2 2 7 4 s 1 6 8 1 7 5 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 28 Kürzeste Wege Entwicklung eines einfachen Algorithmus für SSSP: • Beobachtung: Ähnlich wie BFS • Erste Idee: Nimm immer die kürzeste Kante, die zu noch nicht entdecktem Knoten führt 2 2 7 4 s 1 6 8 1 7 5 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 29 Kürzeste Wege Entwicklung eines einfachen Algorithmus für SSSP: • Beobachtung: Ähnlich wie BFS • Erste Idee: Nimm immer die kürzeste Kante, die zu noch nicht entdecktem Knoten führt 2 2 7 4 s 1 6 8 1 7 5 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 30 Kürzeste Wege Entwicklung eines einfachen Algorithmus für SSSP: • Beobachtung: Ähnlich wie BFS • Erste Idee: Nimm immer die kürzeste Kante, die zu noch nicht entdecktem Knoten führt 2 Aber auch sonst immer? 2 7 4 s 1 6 8 1 7 Funktioniert in diesem Beispiel! SS 2008 5 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 31 Kürzeste Wege Entwicklung eines einfachen Algorithmus für SSSP: • Beobachtung: Ähnlich wie BFS • Erste Idee: Nimm immer die kürzeste Kante, die zu noch nicht entdecktem Knoten führt Was passiert hier? 2 2 1 7 1 s 2 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 32 Kürzeste Wege Entwicklung eines einfachen Algorithmus für SSSP: • Beobachtung: Ähnlich wie BFS • Erste Idee: Nimm immer die kürzeste Kante, die zu noch nicht entdecktem Knoten führt Was passiert hier? 2 2 1 7 1 s Die von unserem Algorithmus berechnete Lösung (Weglänge 8) SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 2 33 Kürzeste Wege Entwicklung eines einfachen Algorithmus für SSSP: • Beobachtung: Ähnlich wie BFS • Erste Idee: Nimm immer die kürzeste Kante, die zu noch nicht entdecktem Knoten führt 2 Die direkte Verbindung hat nur Länge 7! 2 1 7 1 s 2 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 34 Kürzeste Wege Entwicklung eines einfachen Algorithmus für SSSP: • Beobachtung: Ähnlich wie BFS • Erste Idee: Nimm immer die kürzeste Kante, die zu noch nicht entdecktem Knoten führt 2 2 Die direkte Verbindung hat nur Länge 7! Algorithmus berechnet nicht kürzeste Wege! 1 s 1 7 2 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 35 Kürzeste Wege Entwicklung eines einfachen Algorithmus für SSSP: • Beobachtung: Ähnlich wie BFS • Erste Idee: Nimm immer die kürzeste Kante, die zu noch nicht entdecktem Knoten führt 2 2 Die direkte Verbindung hat nur Länge 7! Algorithmus berechnet nicht kürzeste Wege! 1 s 1 7 2 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 36 Kürzeste Wege Entwicklung eines einfachen Algorithmus für SSSP: • Beobachtung: Ähnlich wie BFS • Erste Idee: Nimm immer die kürzeste Kante, die zu noch nicht entdecktem Knoten führt Warum funktioniert der Algorithmus nicht? 2 2 1 7 1 s t SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 2 r 37 Kürzeste Wege Entwicklung eines einfachen Algorithmus für SSSP: • Beobachtung: Ähnlich wie BFS • Erste Idee: Nimm immer die kürzeste Kante, die zu noch nicht entdecktem Knoten führt Der Weg von s nach r ist einziger und damit kürzester Weg 2 2 1 7 1 s t SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 2 r 38 Kürzeste Wege Entwicklung eines einfachen Algorithmus für SSSP: • Beobachtung: Ähnlich wie BFS • Erste Idee: Nimm immer die kürzeste Kante, die zu noch nicht entdecktem Knoten führt Der Weg von s nach r ist einziger und damit kürzester Weg Die Weglänge von s nach t über r ergibt sich aus Länge von s nach r plus Länge von r nach t SS 2008 2 2 1 7 1 s t Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 2 r 39 Kürzeste Wege Neuer Ansatz: • Sei S die Menge der entdeckten Knoten • Merke optimale Lösung für S: Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten Weges von s nach v • Zu Beginn: S={s} und d[s]=0 • Für v∈V-S berechne kürzesten Weg innerhalb von S gefolgt von einer einzigen Kante 2 2 7 4 s 0 1 6 8 1 7 5 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 40 Kürzeste Wege Neuer Ansatz: • Sei S die Menge der entdeckten Knoten • Merke optimale Lösung für S: Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten Weges von s nach v • Zu Beginn: S={s} und d[s]=0 • Für v∈V-S berechne kürzesten Weg innerhalb von S gefolgt von einer einzigen Kante 2 2 2 7 4 s 0 6 8 1 7 7 SS 2008 1 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 5 41 41 Kürzeste Wege Neuer Ansatz: • Sei S die Menge der entdeckten Knoten • Merke optimale Lösung für S: Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten Weges von s nach v • Zu Beginn: S={s} und d[s]=0 • Für v∈V-S berechne kürzesten Weg innerhalb von S gefolgt von einer einzigen Kante 2 2 2 7 4 s 0 1 6 8 1 7 5 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 42 42 Kürzeste Wege Neuer Ansatz: • Sei S die Menge der entdeckten Knoten • Merke optimale Lösung für S: Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten Weges von s nach v • Zu Beginn: S={s} und d[s]=0 • Für v∈V-S berechne kürzesten Weg innerhalb von S gefolgt von einer einzigen Kante 4 2 2 2 7 4 s 0 6 8 1 7 7 SS 2008 1 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 5 43 43 Kürzeste Wege Neuer Ansatz: • Sei S die Menge der entdeckten Knoten • Merke optimale Lösung für S: Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten Weges von s nach v • Zu Beginn: S={s} und d[s]=0 • Für v∈V-S berechne kürzesten Weg innerhalb von S gefolgt von einer einzigen Kante 4 2 2 2 7 4 s 0 1 6 8 1 7 5 SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 44 44 Kürzeste Wege Neuer Ansatz: • Sei S die Menge der entdeckten Knoten • Merke optimale Lösung für S: Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten Weges von s nach v • Zu Beginn: S={s} und d[s]=0 • Für v∈V-S berechne kürzesten Weg innerhalb von S gefolgt von einer einzigen Kante 4 2 2 2 7 4 s 0 6 8 1 7 5 SS 2008 1 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 11 5 45 45 Kürzeste Wege Neuer Ansatz: • Sei S die Menge der entdeckten Knoten • Merke optimale Lösung für S: Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten Weges von s nach v • Zu Beginn: S={s} und d[s]=0 • Für v∈V-S berechne kürzesten Weg innerhalb von S gefolgt von einer einzigen Kante 4 2 2 2 7 4 s 0 6 8 1 7 5 SS 2008 1 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 5 46 46 Kürzeste Wege Neuer Ansatz: • Sei S die Menge der entdeckten Knoten • Merke optimale Lösung für S: Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten Weges von s nach v • Zu Beginn: S={s} und d[s]=0 • Für v∈V-S berechne kürzesten Weg innerhalb von S gefolgt von einer einzigen Kante 4 2 2 2 7 4 s 0 6 8 1 7 5 SS 2008 1 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 11 5 47 10 47 Kürzeste Wege Neuer Ansatz: • Sei S die Menge der entdeckten Knoten • Merke optimale Lösung für S: Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten Weges von s nach v • Zu Beginn: S={s} und d[s]=0 • Für v∈V-S berechne kürzesten Weg innerhalb von S gefolgt von einer einzigen Kante 4 2 2 2 7 4 s 0 6 8 1 7 5 SS 2008 1 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 11 5 48 10 48 Kürzeste Wege Neuer Ansatz: • Sei S die Menge der entdeckten Knoten • Merke optimale Lösung für S: Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten Weges von s nach v • Zu Beginn: S={s} und d[s]=0 • Für v∈V-S berechne kürzesten Weg innerhalb von S gefolgt von einer einzigen Kante 4 2 2 2 7 4 s 0 6 8 1 7 5 SS 2008 1 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 11 5 49 10 49 Kürzeste Wege Neuer Ansatz: • Sei S die Menge der entdeckten Knoten • Merke optimale Lösung für S: Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten Weges von s nach v • Zu Beginn: S={s} und d[s]=0 • Für v∈V-S berechne kürzesten Weg innerhalb von S gefolgt von einer einzigen Kante 4 2 2 2 7 4 s 0 6 8 1 7 5 SS 2008 1 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 11 5 50 10 50 Kürzeste Wege Neuer Ansatz: • Sei S die Menge der entdeckten Knoten • Merke optimale Lösung für S: Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten Weges von s nach v • Zu Beginn: S={s} und d[s]=0 • Für v∈V-S berechne kürzesten Weg innerhalb von S gefolgt von einer einzigen Kante 4 2 2 2 Algorithmus berechnet kürzeste Wege im Beispiel korrekt 7 4 s 0 6 8 1 7 5 SS 2008 1 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 11 5 51 10 51 Kürzeste Wege Algorithmus von Dijkstra: 1. Es sei S die Menge der entdeckten Knoten 2. Invariante: Merke optimale Lösung für S: Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten Weges von s nach v 3. Zu Beginn: S={s} und d[s]=0 4. while V≠S do 5. Wähle Knoten v∈V \ S mit mindestens einer Kante aus S und für den d‘[v] = min d[u] + w(u,v) so klein wie (u,v)∈E möglich ist 6. Füge v zu S hinzu und setze d[v] ← d‘[v] SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 52 Kürzeste Wege Wie kann man Pfade berechnen? • Wie bei BFS/DFS über Feld π • Wenn (u,v) die Kante ist für die das Minimum in Zeile 5 erreicht wird, dann setze π[v] ← u • Kürzester s-u-Weg P(u) ist implizit gespeichert: • Für u=s haben wir den leeren Weg als kürzesten Weg von s nach s • Für u≠s gilt: P(u) besteht aus Weg P(π(u)) gefolgt von Kante (π[u],u) SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 53 Kürzeste Wege Satz 14.14 (Korrektheit): (Invariante) Für jedes u∈S ist zu jedem Zeitpunkt der Ausführung des Algorithmus der Weg P(u) ein kürzester s-u-Weg. SS 2008 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 54