这只是我尝试通过递归进行的无向图DFS的简单代码。递归确实在这里终止(我猜是吗?)。那么,是什么导致了分段错误?我使用了在线编译器,即jdoodle和辅导手册。(好吧,这很愚蠢,对不起)
#include <bits/stdc++.h>
using namespace std;
void dfs(vector<int> g[],int n,bool vis[]){
vis[n]=true;
cout<<n<<" ";
for(auto x:g[n]){
if(!vis[x]) dfs(g,x,vis);
}
return;
}
int main() {
int t;
cin>>t;
while(t--){
int n,e,u,v,i;
cin>>n>>e;
bool vis[n]={false};
vector<int> g[n];
for(i=0;i<e;i++){
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
dfs(g,n,vis);
}
return 0;
}
答案 0 :(得分:2)
您在g
中的vis
和dfs
上具有超出范围的数组访问权限。两个数组的大小均为n
,但您访问的是g[n]
和vis[n]
。
也许您想打dfs(g,0,vis);
??