传送门
给出一些点的数,进行遍历有几块
直接用dfs进行二维数组遍历会超时,所以利用set进行离散化
#include <iostream>
#include <cstdio>
#include <set>
using namespace std;
set<pair<int,int> >st;
int a[8]={0,0,1,1,1,-1,-1,-1};
int b[8]={1,-1,-1,0,1,-1,0,1};
void dfs(int x,int y){
st.erase(make_pair(x,y));
for(int i=0;i<8;i++){
int xx=x+a[i];
int yy=y+b[i];
if(st.find(make_pair(xx,yy))!=st.end())dfs(xx,yy);
}
}
int main(){
int n;
scanf("%d",&n);
while(n--){
int x,y;
scanf("%d%d",&x,&y);
st.insert(make_pair(x,y));
}
int ans=0;
set<pair<int,int> >::iterator it;
while(!st.empty()){
int x,y;
it=st.begin();
x=it->first;
y=it->second;
dfs(x,y);
ans++;
}
printf("%d\n",ans);
return 0;
}