Zum Inhalt springen

Informatik · Klasse 9–13 · aktualisiert

Tiefensuche (DFS): Ablauf, Stack und Beispiele

Du führst die Tiefensuche Schritt für Schritt aus, verstehst Besuchsmarkierung und Stack und vergleichst sie mit der Breitensuche.

0 von 11 Aufgaben gelöst

Tiefensuche (DFS): Ablauf, Stack und Beispiele

Kurz gesagt

Die Tiefensuche (DFS) geht von einem Startknoten aus zuerst einen Pfad ganz in die Tiefe. Geht es nicht weiter, geht sie zurück und probiert den nächsten Nachbarn. Sie markiert besuchte Knoten und nutzt Rekursion oder einen Stack. Einen kürzesten Weg garantiert sie nicht.

Stell dir vor, du suchst den Ausweg aus einem Irrgarten. Du folgst einem Gang, bis es nicht mehr weitergeht, und gehst dann zurück zur letzten Abzweigung. Genau so arbeitet die Tiefensuche. Mit ihr lassen sich zum Beispiel Rätsel mit nur einer Lösung wie Irrgärten lösen.

Deine Lernziele

Hake ab, was du schon kannst. Löst du alle Aufgaben eines Abschnitts, hakt Mela das Ziel für dich ab.

3 Abschnitte

Ein Graph besteht aus Knoten (Punkten) und Kanten (Verbindungen zwischen Knoten). Die Tiefensuche (englisch depth-first search, kurz DFS) durchsucht einen Graphen so: Sie startet bei einem Startknoten und geht zuerst einen Pfad ganz in die Tiefe, bevor sie zu abzweigenden Pfaden kommt.

So gehst du vor: Erstens gehst du vom aktuellen Knoten zum ersten Nachbarn, der noch nicht entdeckt ist. Zweitens rufst du dort dieselbe Suche noch einmal auf (rekursiv). Drittens: Hat ein Knoten keinen weiteren Nachfolger mehr, geht die Suche Schritt für Schritt zum Vorgänger zurück und versucht es dort mit dem nächsten Nachbarn.

Welcher Nachbar der „erste“ ist, hängt von der Darstellung des Graphen ab. Bei einer Adjazenzliste (für jeden Knoten eine Liste seiner Nachbarn) als verkettete Liste kommen die Nachbarn in der Reihenfolge ihres Eintrags in der Liste dran. Bei einer Aufgabe ist die Nachbarreihenfolge deshalb eine Vorgabe, die du genau einhalten musst.

Mit einem anderen Startknoten oder bei einem gerichteten Graphen (die Kanten haben eine Richtung), der nicht symmetrisch ist, kann sich die Reihenfolge der durchlaufenen Knoten ändern.

Definition

Tiefensuche

Ein Verfahren zum Suchen von Knoten in einem Graphen. Dabei wird zunächst ein Pfad vollständig in die Tiefe beschritten, bevor abzweigende Pfade beschritten werden.

Beispiel: Tiefensuche von S aus, Nachbarn in der angegebenen Reihenfolge

  1. 1Ungerichteter Graph. Nachbarn in dieser Reihenfolge: S: C, A · A: S, B, D · B: A, C, E
  2. 2C: S, B · D: A, E · E: B, D · F: G · G: F
  3. 3S besuchen. Der erste Nachbar C ist neu: C besuchen.
  4. 4C hat die Nachbarn S und B. S ist schon besucht, also B besuchen.
  5. 5B: Der erste Nachbar A ist neu: A besuchen. A: S und B sind besucht, D ist neu: D besuchen.
  6. 6D: A ist besucht, E ist neu: E besuchen. E hat nur die besuchten Nachbarn B und D: E ist fertig.
  7. 7Zurück über D, A, B und C bis S: Dabei findet keiner dieser Knoten einen neuen Nachbarn. Auch A, der zweite Nachbar von S, ist schon besucht.
  8. 8Besuchsreihenfolge: S C B A D E. F und G werden von S aus nicht erreicht.

Merke: Erst ganz in die Tiefe, dann Schritt für Schritt zurück: Zurück geht die Suche nur, wenn ein Knoten keinen weiteren Nachfolger mehr hat.

Teste dich

LeichtEin Knoten hat keinen Nachbarn mehr, der noch nicht besucht ist. Was tut die Tiefensuche dann?
MittelIm Beispiel mit Start S: Welcher Knoten wird direkt nach C besucht?

Alles auf einen Blick

Tiefensuche

  • Tiefensuche

    zuerst ein Pfad ganz in die Tiefe, dann Schritt für Schritt zurück

  • Nachbarreihenfolge

    eine Vorgabe, sie hängt von der Darstellung des Graphen ab

  • Besuchsmarkierung

    verhindert, dass die Suche im Kreis läuft

  • Stack oder Rekursion

    speichert den Weg und führt zum Vorgänger zurück

  • Breitensuche

    findet bei ungewichteten Kanten einen kürzesten Pfad

  • Tiefensuche

    garantiert keinen kürzesten Weg, beide Verfahren haben die Laufzeit O(|V|+|E|)

Musteraufgabe · Schritt für Schritt

Tiefensuche in einem ausgedachten Graphen (erfundenes Beispiel)

  1. 1Ausgedachter ungerichteter Graph, Nachbarn in dieser Reihenfolge: P: Q, R · Q: P, T · R: P, T · T: Q, R, U · U: T
  2. 2Start P. P besuchen. Der erste Nachbar Q ist neu: Q besuchen.
  3. 3Q hat die Nachbarn P und T. P ist besucht, T ist neu: T besuchen.
  4. 4T hat die Nachbarn Q, R und U. Q ist besucht, R ist neu: R besuchen.
  5. 5R hat die Nachbarn P und T. Beide sind besucht, R ist fertig. Zurück zu T.
  6. 6T: Der nächste Nachbar U ist neu: U besuchen. U hat nur den besuchten Nachbarn T und ist fertig.
  7. 7Zurück über T und Q bis P. P hat R als zweiten Nachbarn, doch R ist schon besucht.
  8. 8Besuchsreihenfolge: P Q T R U. Probe: Jeder der fünf Knoten kommt genau einmal vor.

Fehler finden

Prüfe die Schritte dieser Tiefensuche (ausgedachtes Beispiel) In einer Zeile steckt ein Fehler. Tippe sie an.

Lückentext

Wähl in jeder Lücke das passende Wort und prüf dann deine Antworten.

Bei einem Stack legst du ein Element nur auf, und pop holt das Element von dort wieder. Hat ein Knoten nur noch besuchte Nachbarn, geht die Suche Schritt für Schritt zum zurück. Die Breitensuche nimmt den ersten Knoten der Warteschlange heraus und hängt neue Nachbarn am der Warteschlange an.

Karteikasten

Erst selbst überlegen, dann umdrehen.

Übung mit Feedback

Abschluss-Check: Tiefensuche

LeichtEin Knoten hat die Nachbarn M, K und L, genau in dieser Reihenfolge, alle noch unbesucht. Welcher Nachbar kommt bei der Tiefensuche zuerst dran?
MittelWozu braucht die Tiefensuche einen Stack oder Rekursion?
SchwerWas gilt für die Tiefensuche, wenn man den kürzesten Weg zu einem Ergebnis sucht?

Weiterlesen in Informatik