8.codeup-图的遍历-问题 B: 连通图

77 阅读1分钟

思路

  • BFS遍历一下统计需要几次初次调用BFS,即为他的连通分量。

注意

代码

#include<vector>
using namespace std;
const int maxn=1010;
vector<int> adj[maxn];
bool vis[maxn]={false};
int n,m;

void DFS(int u){
	vis[u]=true;
	for(int i=0;i<adj[u].size();i++){
		int temp=adj[u][i];
		if(vis[temp]==false) DFS(temp);
	}
}

int main(){
	int a,b;
	while(scanf("%d%d",&n,&m)!=EOF&&n!=0){
		for(int i=1;i<=m;i++){
			scanf("%d%d",&a,&b);
			adj[a].push_back(b);
			adj[b].push_back(a);
		}	
		int ans=0;
		for(int i=1;i<=n;i++){
			if(vis[i]==false){
				DFS(i);
				ans++;
			}
		}
		if(ans!=1) printf("NO\n");
		else printf("YES\n");
	}
	return 0;
}