传送门
给出一些点的数,进行遍历有几块
直接用dfs进行二维数组遍历会超时,所以利用set进行离散化
#include <iostream>
#include <cstdio>
#include <set>
using namespace std;
set<pair<int,int> >st;
int a[] = {0,0,1,1,1,-1,-1,-1};
int b[] = {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
", ans);
return 0;
}