7.codeup-图的遍历-问题 A: 第一题

71 阅读1分钟

思路

  • 傻逼题目不提供范围,直接用bfs遍历一下即可。

注意

  • 采用邻接表,数据最大为maxn=1000010。

代码

#include<vector>
using namespace std;
const int maxn=1000010;
vector<int> adj[maxn];
bool vis[maxn]={false};
vector<int> v;

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",&a,&b)!=EOF){
		adj[a].push_back(b);
		adj[b].push_back(a);
		v.push_back(a);
		v.push_back(b);
	}
	int ans=0;
	for(int i=0;i<v.size();i++){
		int temp=v[i];
		if(vis[temp]==false){
			DFS(temp);
			ans++;
		}
	}
	printf("%d",ans);
	return 0;
}