0

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

1 回答 1

0

有两种可能的解释:

  1. 有一个循环,您的循环检测代码不起作用。
  2. 图太深;即如果堆栈更大,您的代码将起作用。

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

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

于 2018-05-12T05:07:38.833 回答