Die Tiefensuche Vorgedanke: Die Sage von Theseus und dem Minotaurus Das Labyrinth des Minotaurus Hilfsmittel: Roter Faden In unserem Beispiel: Farbe
Einleitung Regeln: Wenn in einer Sackgasse: Umdrehen Erreichen einer Kreuzung: Kreuz an den Herkunftsgang Wenn bereits Kreuze an anderen Wänden: …und kein Kreuz bereits an Herkunftsgang: Zweites Kreuz malen und umdrehen …und bereits zwei Kreuze an Herkunftsgang: Von links aus nächsten Gang ohne oder mit nur einem Kreuz versehen Gang nehmen
Beispiel Das Labyrinth:
Rekursive Implementierung 1 function Tiefensuche(X) 2 if Zustand[X] = "entdeckt" then return 3 if Zustand[X] = Ziel then exit {Ziel gefunden!} 4 Zustand[X] := "entdeckt" 5 for each benachbarte Kreuzung Y von X do 6 Tiefensuche(Y) 7 endfor 8 end
Vor- und Nachteile Vorteile: Einfachheit Effizienz Nachteile: Es wird nicht der kürzeste Weg zum Ziel gefunden In unendlich großen Labyrinthen wird evtl. ewig in der falschen Richtung gesucht
Weitere Beispiele: Internetsuche
Andere Suchalgorithmen Breitensuche: Die Breitensuche ist ein Algorithmenmuster, das die Knoten eines Graphen nach der Entfernung von einem Startknoten geordnet durchläuft. Zuerst werden alle von diesem Startknoten direkt durch eine Kante erreichbaren Knoten bearbeitet, danach die mit zwei Kanten Entfernung, dann die mit drei usw.
Tiefen- vs. Breitensuche Tiefensuche
Weitere Anwendungen in Labyrinthen mit „Einbahnstraßen“ im Internet Im „Labyrinth“ der Spielzüge bei Solitairespielen ...