繁体   English   中英

尝试DFS此图以查找强连接的组件时,为什么会出现StackOverFlowError?

[英]Why do I get StackOverFlowError when trying to DFS this graph for finding strongly connected component?

我正在尝试编写一种算法来确定图形是否牢固连接。 我认为我的代码几乎是正确的,尽管我不断收到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. 有一个循环,您的循环检测代码不起作用。
  2. 该图太深; 也就是说,如果堆栈更大,您的代码将起作用。

查看您的代码,我认为第二种解释是正确的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM