Breitensuche

Bei der Breitensuche gehen wir – salopp gesagt – in alle Richtungen gleich schnell. Dabei werden etwaige Gewichte zwischen den Knoten ignoriert. Wir werden also einen Weg finden, aber nicht zwingend den Kürzesten!

Für die Suche brauchen wir zwei Listen, womit wir unseren Suchfortschritt festhalten:

  • Closed-List: Hier werden alle abgehandelten Knoten aufgelistet
  • Open-List: Hier werden alle bekannten Knoten welche als nächste Kandidaten in Frage kommen aufgeführt

Vorbereitung

Zu Beginn ist die Closed-List leer. Der Startknoten kommt auf die Open-List:

Closed-List: –
  Open-List: I

Schritt 1

Wir nehmen den ersten Knoten von der Open-List – das ist Ⓘ – und besuchen alle Nachbarn. Diese werden der Open-List angehängt. Der Knoten Ⓘ gilt jetzt als besucht: Er wird von der Open-List gestrichen und kommt auf die Closed-List.

Closed-List: I
  Open-List: M, C, B, H, P

Schritt 2

Nun besuchen wir wiederum den ersten Knoten auf der Open-List, nämlich Ⓜ. Die Nachbarn Ⓐ und Ⓧ kommen zuhinterst auf die Open-List. Der Nachbar Ⓒ ist bereits auf einer Liste, d.h. wir haben bereits einen Weg zu Ⓒ gefunden. Die Kante zwischen Ⓜ und Ⓒ wird entfernt. (Wir wollen am Schluss zu jedem Knoten nur genau einen Weg haben.)
Ⓜ kommt auf die Closed-List.

Closed-List: I, M
  Open-List: C, B, H, P, A, X

Schritt 3

Erneut gehen wir zum ersten Knoten auf der Open-List, also Ⓒ, und schauen uns dessen Nachbarn an: Ⓜ und Ⓧ sind bereites bekannt.
Ⓒ kommt auf die Closed-List.

Closed-List: I, M, C
  Open-List: B, H, P, A, X

Schritt 4

Jetzt sind die Nachbarn von Ⓑ dran: Ⓓ kommt auf die Open-List, ebenso Ⓩ. Den Weg zu Ⓗ haben wir bereits gefunden. Wir können dies Kante also streichen.
Ⓑ kommt auf die Closed-List.

Closed-List: I, M, C, B
  Open-List: H, P, A, X, D, Z

Schritt 5

Der nächste Knoten auf der Open-List ist Ⓗ. Wir fügen die noch nicht besuchten Nachbarn von Ⓗ zur Open-List hinzu. Es sind dies Ⓛ, Ⓨ und Ⓚ. Ⓛ ist unser gesuchtes Ziel: wir haben also einen Weg von Ⓘ nach Ⓛ gefunden, und zwar über Ⓗ. Ⓗ kommt auf die Closed-List und wir brechen den Algorithmus ab.

Closed-List: I, M, C, B, H
  Open-List: P, A, X, D, Z, L, Y, K

Ergebnis

Die roten Linien und Knoten im Graphen stellen einen Baum dar. Wenn wir die Knoten nun etwas umpositionieren erhalten wir den folgenden erforschten Baum:

Dieser Baum zeigt zu jedem erforschten Knoten genau einen Weg vom Startknoten aus. Da wir den Algorithmus abgebrochen haben, sobald wir den Zielknoten gefunden haben, sind nicht alle Knoten aufgelistet. Aber wir finden den gesuchten Weg zum Zielknoten.

Wir zeichnen nun noch mit Pfeilen die Reihenfolge ein in welcher wir diese Knoten «durchsucht» haben:

Diese Art der Baumsuche nennt man Breitensuche.

Führe selbst eine Breitensuche aus: Finde den Weg in umgekehrter Richtung, also vom Knoten Ⓛ zum Knoten Ⓘ.

  • Zeichne dein Fortschritt analog zum Beispiel im Graphen auf
  • Führe daneben eine Open- und eine Closed-List

Könnten wir diese Aufgabe auch mit einer Tiefensuche bewältigen?
Überlegt zu zweit ob und wie das möglich wäre.