Java 使用邻接列表(int[][])计算有向图中2个节点之间的所有可能路径

Java 使用邻接列表(int[][])计算有向图中2个节点之间的所有可能路径,java,graph,Java,Graph,我试图计算有向图中两个节点之间的所有路径。该图可能是循环的,但是,我希望避免返回到源节点——从而避免无限循环。邻接列表的定义如下: adjlist = {{ 1, 2 },{ 0, 3 },{ 0, 3 },{ 1, 2 },} 这意味着节点0(列表中的第一个)可以连接到节点1和2,节点1可以连接到节点0和3,节点2可以连接到节点0和3,节点3可以连接到节点1和2 我试过这个: public int numPaths(int[][] adjlist, int src, int dst) {

我试图计算有向图中两个节点之间的所有路径。该图可能是循环的,但是,我希望避免返回到源节点——从而避免无限循环。邻接列表的定义如下:

adjlist = {{ 1, 2 },{ 0, 3 },{ 0, 3 },{ 1, 2 },} 
这意味着节点0(列表中的第一个)可以连接到节点1和2,节点1可以连接到节点0和3,节点2可以连接到节点0和3,节点3可以连接到节点1和2

我试过这个:

 public int numPaths(int[][] adjlist, int src, int dst) {
 // TODO
 int paths = 0;
 for (int i = 0; i < adjlist[src].length; i++) {
     boolean[] visited = new boolean[adjlist.length];
     visited[src] = true;
     DFS2(adjlist, adjlist[src][i], dst, paths, visited);
 }
 return paths;
}

 public static void DFS2(int[][] adjlist, int src, int dst, int paths, boolean[] visited) {
 visited[src] = true;
 if (src == dst) {
     paths++;
 }
 else {
     for (int i = 0; i < adjlist[src].length; i++) {
         if (visited[i] == false) {
             DFS2(adjlist, adjlist[src][i], dst, paths, visited);
         }
     }
 }
这意味着我得到了一个无限递归。 任何帮助都会很好,谢谢

Exception in thread "main" java.lang.StackOverflowError