Na dann würde sich mein Code nochmal vereinfachen.psychodad hat geschrieben:Mich interessiert nur ob eine Lösung existiert, die genaue Abbildung brauche ich nicht unbedingt.
Hm, ich habe den Code direkt auf der Webseite fast 1:1 übernommen. Aus den ``while``-Schleifen habe ich ``for``-Schleifen gemacht und in der zweiten Funktion noch den Rekursionsanker hinzugefügt."Musst Du denn wirklich einen Iterator beim Aufruf übergeben? Kannst Du das nicht in einer Schleife lösen in der dann der rekursive Aufruf mit nur einem Element gemacht wird? In dem Beispielcode auf der Wiki-Seite wird das jedenfalls so gemacht. "
Gelingt mir eben nicht, auch wenn es in dem Script so beschrieben wird.
Wieso wird da nicht jeder Zweig durchsucht? Mal ein kleines anderes Beispiel:Wenn ich mit einer äußeren Schleife die Knoten durchgehe, dann suche ich ja nicht in jedem "Zweig" des Suchbaumes weiter. Vielleicht gibt es da eine einfache algorithmische Formulierung (wie z.B. in dem Script) aber mir ist diese Umsetzung nicht gelungen.
Code: Alles auswählen
def dirs(path, level=0):
for directory in filter(os.path.isdir,
map(lambda x: os.path.join(path, x),
os.listdir(path))):
print '%s%s' % (' ' * level, directory)
dirs(directory, level + 1)
Das ganze klingt übrigens ziemlich nach einer Hausaufgabe, darum habe ich auch noch keinen konkreten Quelltext gepostet.
Als Anfang mal meine Node-Klasse, auf der der Algorithmus arbeitet:
Code: Alles auswählen
class Node(object):
def __init__(self, name):
self.name = name
self.neighbours = list()
def __str__(self):
return self.name
def __repr__(self):
return '<%s.%s %r at 0x%x>' % (self.__module__,
self.__class__.__name__,
self.name,
id(self))
def _get_degree(self):
return len(self.neighbours)
degree = property(_get_degree, doc='Degree of the node.')
def add_neighbour(self, other):
self.neighbours.append(other)
other.neighbours.append(self)