Die Grundidee ist die Gleiche wie bei der Wegfindung mit Liste, mit folgenden Unterschieden:
Laden Sie folgende Python-Datei in Ihr Labyrinthverzeichnis:
from laby import Laby from zelle import Zelle import time from random import shuffle, randrange lab = Laby(8,5) # Neues Labyrinth mit allen Mauern zu # Todo-Liste enthält die Startzelle todo = [ lab[0,0] ] lab[0,0].mark = '.' # Startzell als besucht markieren # Liste mit allen Richtungen (wird dann verwürfelt) richtungen = [0, 1, 2, 3] # Solange die Todo-Liste nicht leer ist, wiederhole: while len(todo)>0: # Entferne eine Zelle aus der Todo-Liste, nenne diese «aktuell» aktuell = todo.pop() # Letzten Eintrag entfernen # Für alle Richtungen $d$ in zufälliger Reihenfolge shuffle(richtungen) for d in richtungen: # Ist Mauer in diese Richtung zu? # Gibt es in diese Richtung eine Nachbarszelle? # Ist diese noch nicht markiert? # Markieren, Mauer öffnen, aktuell und nachbar der todo-Liste hinuzfügen. # Schlaufe abbrechen pass
Versuchen Sie den Pseudo-Code in Python zu übersetzen. Konsultieren Sie dazu auch Ihre Python-Programme mit der Wegfindung mit Todo-Liste, bzw. Tiefen- und Breitensuche.
Mit der Tiefensuche werden sehr lange «Schläuche» (mit wenig Kreuzungen) produziert. Das liegt daran, dass halt so weit wie möglich weiter gegangen wird.
if randrange(10)==0: