深度和寬度搜索都寫了,記住分析的過程。
#include <iostream>
#include <vector>
#include <cstring>
#include <queue>
using namespace std;
const int maxn = 1010;
int nV,nE;
int vis[maxn];
int f (int lo,vector<vector<int>> V) {
// for (int i=0;i<V[lo].size();i++) {
// if (!vis[V[lo][i]]) {
// vis[V[lo][i]] = 1;
// f(V[lo][i], V);
// }
// }
queue<int> Q;
Q.push(lo);
while (!Q.empty()) {
int tmp = Q.front(); Q.pop();
for (int i=0;i<V[tmp].size();i++) {
if(!vis[V[tmp][i]]) {
vis[V[tmp][i]]=1;
Q.push(V[tmp][i]);
}
}
}
}
int main() {
cin>>nV>>nE;
vector<vector<int>> V(maxn);
memset(vis,0,sizeof(vis));
for (int i=0;i<nE;i++) {
int a,b;
cin>>a>>b;
V[a].push_back(b);
V[b].push_back(a);
}
int ans =0;
for (int i=1;i<=nV;i++) {
if(!vis[i]) {
vis[i]=1;
f(i,V); ans++;
}
}
cout<<ans<<endl;
}