【发布时间】:2018-05-12 04:46:45
【问题描述】:
我正在尝试编写一个算法来确定一个图是否是强连接的。我认为我的代码几乎是正确的,尽管我不断收到 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);
}
}
【问题讨论】:
-
也许这会对你有所帮助:stackoverflow.com/questions/34553782/…
-
您正在使用
src更新visited我猜是节点号?g定义在哪里?if(!visited[i]){ g.dfs(i,visited,stack);我也不清楚:如果您想从每个可能的节点启动 dfs,请忽略visited。请发帖minimal reproducible example 这样我们就不用猜了。
标签: java graph stack-overflow depth-first-search strongly-connected-graph