为什么在尝试使用DFS此图表查找强连接组件时会出现StackOverFlowError?

时间:2018-05-12 04:46:46

标签: java graph stack-overflow depth-first-search strongly-connected-graph

我正在尝试编写一种算法来确定图形是否强连接。我认为我的代码几乎是正确的,尽管我一直得到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);
        }
    }

1 个答案:

答案 0 :(得分:0)

有两种可能的解释:

  1. 有一个循环,你的循环检测代码不起作用。
  2. 图表太深;即如果堆栈较大,你的代码就可以工作。
  3. 查看您的代码,我认为第二种解释是正确的。

    示例:假设您的图形实际上是一行中的N个节点链。要到达列表中的最后一个节点,您需要进行N深度递归调用。对于足够大的N,这将导致堆栈溢出。