2016-12-23 6 views
-1

Ich versuche eine Funktion zu erstellen, die alle Möglichkeiten für einen Ort zum anderen zurückgibt.Warum funktioniert meine Funktion nicht? (kurz)

Das ist nicht mein endgültiger Code und ich bin mir nicht sicher, ob es funktioniert, aber der Fehler, den ich bekomme, hält mich davon ab, weiterzumachen.

Das Folgende ist mein Python 2.7 Code:

def routes(graph,start,end): 
    path=[] 
    paths=[] 

    for node in graph[start]: 
     if node==end: 
      path+=[end] 
     elif node<end: 
      path.append(node) 
      start=node 
      routes(graph,start,end) 
    return paths  

graph={001:(002),002:(003,004,005),003:(004),004:(005,006)} 
routes(graph,002,005) 

Das Problem beginnt, wenn sie den zweiten Funktionsaufruf eingeben. wenn es versucht, 'für Knoten in Graph [Start]' Zeile ausführen Ich bekomme ein 'int' Objekt ist nicht iterierbar 'Fehler.

Was kann diesen Fehler verursachen?

Warum außerhalb der Rekursion funktioniert es und drinnen nicht?

Vielen Dank.

+0

Was planen Sie mit der Rückkehr Ihres rekursiven Anrufs? – AChampion

+2

Ein Problem ist, dass '(002)' ein 'int' und kein' tuple' ist. Wenn Sie möchten, dass dies ein Tupel ist, müssen Sie '(002,)' (notieren Sie das Komma) schreiben. –

+0

versucht, dass und es immer noch nicht funktioniert = / – Guy

Antwort

0

von here gestohlen (kann ein gutes Buch sein) und leicht aktualisiert:

def find_all_paths(graph, start, end, path=[]): 
    path = path + [start] 
    if start == end: 
     return [path] 
    if start not in graph: 
     return [] 
    paths = [] 
    for node in graph[start]: 
     if node not in path: 
      newpaths = find_all_paths(graph, node, end, path) 
      for newpath in newpaths: 
       paths.append(newpath) 
    return paths 

dann soll dies das gewünschte Ergebnis:

graph = {1: (2,), 2: (3, 4, 5), 3: (4,), 4: (5, 6)} 
print(find_all_paths(graph=graph, start=2, end=5)) 
# -> [[2, 3, 4, 5], [2, 4, 5], [2, 5]] 

vielleicht, dass zu Ihrer Version vergleichen und herausfinden, wo es geht schief?

Verwandte Themen