好,背景的问题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
我不会用循环递归。我个人会走在一条路上,回头一步,而不是试图获得单个节点的所有路径。 – m0skit0 2012-02-28 13:33:38
研究实现[Dijkstra算法](http://en.wikipedia.org/wiki/Dijkstra's_algorithm),然后使用两个起始节点中的每一个运行一次。这可能比你想要做的更简单。 – 2012-02-28 13:35:14