思路:
1.遍历
2.建立一个数组,记录遍历过的点
3.结束条件:所有点都完成遍历
数据结构
1.邻接表(STL-vector)
2.数组(记录点是否来过)
代码:
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
const int N=1e5+100;
vector<int> vec[N];
int n,m,u,v;
bool visited[N];
void dfs(int u){
visited[u]=true;
for(int i=0;i<vec[u].size();i++){
int v=vec[u][i];
if(!visited[v]) dfs(v);
}
}
int main(){
cin>>n>>m;
while(m--){
cin>>u>>v;
vec[u].push_back(v);
vec[v].push_back(u);
}
int ans=0;
memset(visited,false,sizeof(visited));
for(int i=1;i<=n;i++){
if(!visited[i]){
dfs(i);
ans++;
}
}
cout<<ans;
return 0;
}
输入:
5 3
1 2
2 3
4 5
输出:
2