2012-02-28 46 views
1

好,背景的问题allpaths:Java的递归找到一个图形

我正在写一个小程序,着眼于图形,并期待从任何两个给定点的所有路径。

点是ABCDE并且在曲线图上的连接如下...

A->B, A->D, A->E 

B->C 

C->D, C->E 

D->C, D->E 

E->B 

我需要编码它,以便它看起来在其是小于一定长度的所有可能的路径(比方说30) 。规范的古怪的一点是,它可以访问目的地路径的一部分,例如:

启动位于C将C可遵循:

CDC,CEBC,CEBCDC,CDCEBC,CDEBC,CEBCEBC, CEBCEBCEBC

现在我的代码如下......

private void findAllPaths(LinkedList path, Junction node, Junction end) 
{ 
    path.add(node); 
    if(node == end && path.size() > 1) 
    { 
     System.out.println(path); 
    } 
    else 
    { 
     for(Road r : node.getAdjacencies()) 
     { 
      if(path.size() < 30) findAllPaths(path, r.getTarget(), end); 
     } 
    } 
} 

这使我的路径:C,d,C] [C,d,C,E,B,C] [C ,D,C,E,B,C,E,B,C]

我的问题是,递归似乎不像我期望的那样发生。它只会跟随每个节点的第一个相邻节点,并且从不回退尝试其他节点。

如果任何人都可以看到我的问题出在哪里,或看到我的问题,请发帖!所有帮助将不胜感激...

干杯,

Djoodle

+0

我不会用循环递归。我个人会走在一条路上,回头一步,而不是试图获得单个节点的所有路径。 – m0skit0 2012-02-28 13:33:38

+0

研究实现[Dijkstra算法](http://en.wikipedia.org/wiki/Dijkstra's_algorithm),然后使用两个起始节点中的每一个运行一次。这可能比你想要做的更简单。 – 2012-02-28 13:35:14

回答

2

你不删除节点,你已经尝试过之后,再次:

private void findAllPaths(LinkedList path, Junction node, Junction end) 
{ 
    path.add(node); 
    // etc... 
    path.removeLast(); 
} 
+0

哈哈!我知道这是一件愚蠢的事... Thankyou我的朋友,很赞! – DJOodle 2012-02-28 13:49:10

+0

@DJOodle考虑接受这个答案,如果它解决了你的问题。 – Hedja 2012-02-28 13:54:48