私は、ノード数がn
で、エッジ数がk
であるC++で単純なDFSを実装しようとしています。それは無限ループで立ち往生されたいくつかの理由単純なDFSが無限ループに詰まっています
:私はこのコードで間違っているつもりどこ
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define MAXV 1000
void addEdge(vector<int> adj[], int u, int v){
adj[u].pb(v);
adj[v].pb(u);
}
void DFSUtil(int u, vector<int> adj[], vector<int>& visited){
visited[u] = 1;
cout << u << " ";
for(int i = 0;i<adj[u].size();i++){
if(visited[adj[u][i]] == 0){
DFSUtil(u,adj,visited);
}
}
}
void DFS(vector<int> adj[], int N){
vector<int> visited(N, 0);
for(int u = 1;u<N;u++){
if(visited[u] == 0){
DFSUtil(u,adj,visited);
cout << "\n";
}
}
}
int main(){
int n,k,m,i,u,v;
scanf("%d %d",&n,&k);
vector<int> adj[n+1];
for(i = 0;i<k;i++){
scanf("%d %d",&u,&v);
addEdge(adj,u,v);
}
// find connected components
DFS(adj,n+1);
return 0;
}
は、誰かが私を指すもらえますか?
サンプル入力にテストする:
4 3
1 2
2 3
1 4
デバッガでコードをステップ実行して、コードが無限ループに陥っているのを見つけましたか? –
私はprintfステートメントとgetchar()を入れて、何が起こっているのかを理解しようとしました。私はそれがDFSUtil関数に詰まっていることがわかりました。しかし、まだその理由を知らない。 – user3243499
再帰で渡されたベクトルを修正する方法に何か問題があると確信しています。 – user3243499