好的,问题的背景:
我正在编写一个小应用程序,它可以查看图表并查看来自任意两个给定点的所有路径。
点是A B C D E,图上的连接如下...
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]
我的问题是递归似乎没有按照我期望的方式发生。它只遵循每个节点的第一个邻接关系,并且永远不会递归回去尝试其他节点。
如果有人能看到我哪里出了可笑的错误或看到我的问题,请发帖!我们将不胜感激所有帮助...
干杯,
Djooodle
最佳答案
尝试后您不会再次删除该节点:
private void findAllPaths(LinkedList path, Junction node, Junction end)
{
path.add(node);
// etc...
path.removeLast();
}
关于Java递归查找图上的所有路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9482810/