#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
int a[10000][10000],t,n,p[10000],d[10000];
void bfs(int x){
int h=0,l=1;//h为队首,l为队尾
d[1]=x;p[x]=1;//输入进队列做队首,标记
while(h<l){//h大于l时跳出循环
h++;
for(int i=1;i<=n;i++){
if(!p[i] && a[d[h]][i]){
d[++l]=i;//输入队列
p[i]=1;//标记新输入的
}
}
}
}
int main(){
int i,j,k,m,n,ans=0;
cin>>n>>m;//输入节点数,行数
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
a[x][y]=1;
a[y][x]=1;//连通
}
for(int i=1;i<=n;i++){
if(!p[i]){ //如果未遍历过,找到一个岛
ans++;
bfs(i);//继续遍历
}
}
return 0;
}
注意其中部分子代码。。。以及基本运用