举杯消愁愁更愁,月底账单入水流 • 8个月前
using namespace std; bool d[100][100]; //d[i][j]=1表示有一条边,等于0表示没有边 bool vis[100]; //表示是否走过这个点 int n,k,m,from,to; void dfs(int node){
vis[node]=1; //该节点已被查找;
cout<<node<<' ';
for(int i=0;i<k;i++){
if(d[node][i]==1&&vis[i]==0){ //有路,且未访问
dfs(i); //递归查找
}
}
} int main(){
cin>>n;
while(n--){
cin>>k>>m;
for(int i=0;i<m;i++){
cin>>from>>to; //两个需要联通的点(此处无向图,需要存两次)
d[from][to]=1;
d[to][from]=1;
}
for(int i=0;i<k;i++){
if(vis[i]==0) dfs(i); //如果图中有多个互不相连的小块,则多次dfs(另一个强连通分量)
}
cout<<endl;
memset(d,0,sizeof d);
memset(vis,0,sizeof vis);
}
return 0;
}
评论:
请先登录,才能进行评论