【问题标题】:Getting all combinations recursively [Python]递归获取所有组合 [Python]
【发布时间】:2014-12-02 07:02:31
【问题描述】:

考虑一本字典:

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

我正在尝试提出一个递归解决方案,但我无法让任何东西充分发挥作用。 有什么建议可以解决这个问题吗?

【问题讨论】:

  • “我正在尝试提出一个递归解决方案,但我无法让任何东西充分发挥作用”。请在此处发布您的“非工作”代码。 “有什么建议可以解决这个问题吗?”递归绝对是一种方法(深度优先搜索)。

标签: python recursion dictionary combinations


【解决方案1】:

您可以使用以下功能找到所有路径,但是由于您没有发布代码而且我不知道您自己尝试了什么,因此我不知道您在哪里遇到问题,在您告诉之前我无法解释任何事情关于你的尝试和这段代码:

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

演示:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多