Logik und Informatik

Graphalgorithmen

Breitensuche

Acht Kreuzungen, die Gewichte sind Fahrzeiten in Minuten. Der schnellste Weg von A nach H ist nicht der, der auf der Karte am geradesten aussieht.

Ungerichteter Graph · 8 Knoten · 12 Kanten
Ad = 0StartBCDEFGHZiel
Abgeschlossen
0
Kanten geprüft
0
Entdeckt
1
  • in der Warteschlange
  • in Arbeit
  • fertig
  • Kante, über die entdeckt wurde
  • Weg zum Ziel

Warteschlange Q

Vorne wird entnommen, hinten angefügt.

Werte der Knoten

KnotenZustanddvor
Awartet0–
Bunbekannt∞–
Cunbekannt∞–
Dunbekannt∞–
Eunbekannt∞–
Funbekannt∞–
Gunbekannt∞–
Hunbekannt∞–

d: Abstand in Kanten · vor: Vorgänger

Pseudocoden = 8, m = 12
  1. d[v] ← ∞, vor[v] ← – für alle v; d[s] ← 0; Q ← [s]
  2. solange Q nicht leer ist:
  3. u ← vorderster Knoten aus Q (entfernen)
  4. für jeden Nachbarn v von u:
  5. wenn d[v] = ∞ (v noch unentdeckt):
  6. d[v] ← d[u] + 1, vor[v] ← u, v hinten an Q
  7. u ist abgeschlossen

Eckdaten

Aufwand wächst wie
n + m
n Knoten, m Kanten
Graph
gerichtet oder ungerichtet
Gewichte
ohne Bedeutung
Es zählt nur, welche Knoten verbunden sind.
Start und Ziel
Start nötig, Ziel freiwillig
Mit einem Ziel wird am Ende der Weg dorthin eingezeichnet.

Die Idee

Die Breitensuche breitet sich aus wie eine Welle von einem Stein im Wasser. Erst werden alle Knoten erreicht, die eine Kante entfernt sind, dann alle, die zwei Kanten entfernt sind, und so weiter. Dafür reihen sich neu entdeckte Knoten hinten in einer Warteschlange ein; bearbeitet wird immer, wer vorne steht.

Wie der Aufwand zustande kommt

Jeder Knoten wird einmal entnommen und jede Kante ein- oder zweimal angesehen: Die Arbeit wächst wie n + m.

Mehr zu Breitensuche
Grundbegriffe