2016-12-23 53 views
-1

我試圖創建一個函數,將一個地方的所有可能性方法返回給另一個地方。爲什麼我的功能dosnt工作? (短一個)

這不是我的最終代碼,我不知道,如果它的工作,但這個錯誤我從繼續阻止我。

以下是我的Python 2.7的代碼:

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) 

,當它進入第二個函數調用啓動的問題。 當它試圖運行'在圖形[開始]'行的節點我得到一個'int'對象是不可迭代的'錯誤。

什麼會導致這個錯誤?

爲什麼它的工作原理的遞歸外部和內部是不?

非常感謝。

+0

你打算如何迴歸你的遞歸調用? – AChampion

+2

一個問題是'(002)'是一個'int'而不是'tuple'。如果你希望這是一個'元組',你需要編寫'(002,)'(注意逗號)。 –

+0

試過,它仍然不起作用= / – Guy

回答

0

here被盜(可能是一個好讀)和輕微更新:

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 

那麼這應該得到期望的結果:

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]] 

也許比較,爲您的版本,並找出它出錯了?

相關問題