递归获取所有组合[Python]

时间:2014-12-02 07:02:31

标签: python recursion dictionary combinations

考虑字典:

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

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

A = [ [B], [C] ]

我们可以将其扩展为

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

我正在尝试提出递归解决方案,但我无法完全解决问题。 有任何建议如何处理这个问题?

1 个答案:

答案 0 :(得分: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']]