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