Java递归查找图上的所有路径

标签 java recursion graph path tree

好的,问题的背景:

我正在编写一个小应用程序,它可以查看图表并查看来自任意两个给定点的所有路径。

点是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/

相关文章:

javascript - 具有递归函数的程序

c++ - C++中的图轴校准

javascript - 将鼠标悬停在 Meteor onRendered 函数中的 chart.js 值上会导致图表轴偏移

java - 没有第三个表的一对多关联

java - 为什么引用子类对象的父类类型引用变量不能访问子类的方法

java - Web 服务架构 : Redis (as cache) & PostgreSQL for persistence

java - 为什么我可以在 HashMap 中使用字符串作为键?

sql - 使用 linq mvc 的 CTE 递归查询

python - 如何停止Python递归

algorithm - 在有向图中找到 2 个节点之间的路径?