dfs离散化

传送门
给出一些点的数,进行遍历有几块
直接用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\n", ans);
    return 0;
}
posted @ 2019-09-21 14:49  Emcikem  阅读(207)  评论(0编辑  收藏  举报