查找图表中从A到N的所有路径

时间:2013-10-25 05:37:11

标签: python algorithm recursion graph

我正在尝试将以下示例python代码移植到Java:

def find_all_paths(graph, start, end, path=[]):
    path = path + [start]
    if start == end:
        return [path]
    if not graph.has_key(start):
        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

问题是,停止递归的基本情况:

if start == end:
    return [path]

它不支持我允许A和N都是同一节点的要求。

例如:

如果我有以下 digraph

A -> [B, C], 
B -> [C, E], 
C -> [D, A]

我想要A和A之间的所有路径,我应该得到结果:

A -> B -> C -> A

上面的python代码只会给我:

A

1 个答案:

答案 0 :(得分:3)

从A到A的路径必须通过A的邻居。因此,实现此目的的一种方法是枚举所有向外的邻居:

[[["A"]+y for y in find_all_paths(G,x,"A")] for x in graph["A"]]

对于您的图表,结果应为

[[['A', 'B', 'C', 'A']], [['A', 'C', 'A']]]