グラフが強く接続されているかどうかを判断するアルゴリズムを作成しようとしています。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);
}
}