2013-10-25 59 views
0

我試圖端口以下示例Python代碼到Java:從A中查找圖中的所有路徑到N

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都是同一個節點的要求。

例如:

如果我有以下有向圖

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

而且我想A和A之間的所有路徑,我應該有結果:

A -> B -> C -> A 

上面的python代碼只會給我:

A 

回答

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

我不完全理解Python的語法(該行看起來倒退),但它的工作原理,你的邏輯是健全的。 – wulfgarpro