簡體   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