AC

lzhh_lzhh26  •  1个月前


include<bits/stdc++.h>

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;

}


评论:

请先登录,才能进行评论