我正在尝试编写一种算法来确定图形是否强连接。我认为我的代码几乎是正确的,尽管我一直得到StackOverFlowError。我个人认为,因为图表中的一个循环我正在测试我的算法,我的代码并不理解它并且进入循环。但是我使用数组来查看是否已经访问过某个节点!所以这不应该发生!请帮助我理解我的代码有什么问题。无论如何这是我的代码:
static void dfs(int src,boolean[] visited,Stack<Integer> stack){
visited[src]=true;
for(Integer i:adj[src]){
if(!visited[i]){
dfs(i,visited,stack);
}
}
stack.push(src);
}
这就是我从main调用我的DFS函数的方法:
Stack<Integer> stack=new Stack<Integer>();
boolean[] visited=new boolean[n+1];
for(int i=1;i<=n;i++){
if(!visited[i]){
g.dfs(i,visited,stack);
}
}
答案 0 :(得分:0)
有两种可能的解释:
查看您的代码,我认为第二种解释是正确的。
示例:假设您的图形实际上是一行中的N个节点链。要到达列表中的最后一个节点,您需要进行N深度递归调用。对于足够大的N,这将导致堆栈溢出。