2014-12-02 85 views
0

考虑的字典:让所有组合递归[Python的]

{ "A": [ ["B"], ["C"] ], 
    "B": [ ["D"], ["E"] ], 
    "C": [ ["H"] ], 
    "D":[["I"],["J"]] 
} 

我想找到所有导致不在字典键的可能路径。例如

A = [ [B], [C] ] 

我们可以展开来

A = [ [B, D, I],[B, D, J], [B, E], [C, H] ] 

我想拿出一个递归解决方案,但我不能得到任何工作充分。 任何建议如何解决这个问题?

+2

“我想拿出一个递归解决方案,但我不能得到任何工作充分”。请在这里发布您的“非工作”代码。 “有什么建议如何解决这个问题?”递归绝对是一种方法(深度优先搜索)。 – Sriram 2014-12-02 07:09:03

回答

0

你可以找到所有具有以下功能的路径,但是因为你不会发布你的代码,我不知道你试图通过你自己,因此我不知道你有什么问题,我不能解释任何事情,直到你告诉你的尝试和验证码:

def find_all_paths(graph, start,path=[]): 
     path=path+[start] 
     if not graph.has_key(start): 
      return [path] 
     paths = [] 
     for nodes in graph[start]: 
      for n in nodes : 
      if n[0] not in path: 
        newpaths = find_all_paths(graph, n[0], path) 
        for newpath in newpaths: 
         paths.append(newpath) 
     return paths 

g={ "A": [ ["B"], ["C"] ], 
    "B": [ ["D"], ["E"] ], 
    "C": [ ["H"] ], 
    "D":[["I"],["J"]] 
} 

Demmo:

print find_all_paths(g,'A') 
[['A', 'B', 'D', 'I'], ['A', 'B', 'D', 'J'], ['A', 'B', 'E'], ['A', 'C', 'H']] 

print find_all_paths(g,'B') 
[['B', 'D', 'I'], ['B', 'D', 'J'], ['B', 'E']]