Logik
- andere Reihenfolge als DFS
- Statt einen Weg “möglichst weit zu laufen”, coveren wir erst alle Kanten von A. Also A nach B, zurück, A nach C, …, B nach D, B nach F, bis Ebene 2 fertig, dann zurück zu A, Ebene 2, also C nach F, aber F schon besucht, also ned, etc.
Breitensuchbaum
- erfasst minimale Distanzen zu jedem Knoten, jede Ebene nach unten ist eine Distanz mehr
- Bipartition erkennen: jede Ebene bekommt andere Farbe (abwechselnd)
Pseudocode
- Queue: First in First Out (enqueue, dequeue)
- Laufzeit: Wie [[03 DFS]], $O(|V|+|E|)$, wenn verbunden $O(|E|)$
Java
BFS(Adj):
n = Adj.length
visited[1...n] = {false, ..., false}
for v = 1...n
if visited[v] == false:
Path(v, Adj, visited)
Path(v, Adj, visited)
Q = [v]
while Q not empty:
u = dequeue(Q)
visited[u] = true
for w in Adj[u]
if not visited[w]
enqueue(Q, w)