1233. 全球变暖

题意是求一共淹没几个岛,不是求剩下几个岛(这个更复杂一些,可能会出现岛屿增加的情况),用bfs+flood fill做

#include<iostream>
#include<queue>

using namespace std;

const int N = 1010;

#define PII pair<int, int>
#define x first
#define y second

char g[N][N];
int st[N][N];
int n;
int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};

int bfs(int x, int y){
    queue<PII> q;
    q.push({x, y});
    
    int ans = 0;
    
    while(q.size()){
        auto h = q.front();
        int x = h.x, y = h.y;
        q.pop();
        
        ans ++;
        
        int d = 0;
        
        for(int i = 0; i < 4; i ++){
            int a = x + dx[i], b = y + dy[i];
            if(a < 0 || a >= n || b < 0 || b >= n || st[a][b]) continue;
            if(g[a][b] == '.'){
                d = 1;
                continue;
            }
            st[a][b] = 1;
            q.push({a, b});
        }
        if(d) ans --;
    }
    
    return ans;
}

int main(){
    cin >> n;
    
    for(int i = 0; i < n; i ++) cin >> g[i];
           
    int res = 0; 
    for(int i = 0; i < n; i ++)
        for(int j = 0; j < n; j ++)
            if(g[i][j] == '#' && st[i][j] == 0){
                st[i][j] = 1;
                res ++;
                if(bfs(i, j)) res --;
            }
            
    cout << res;
    
    return 0;
}
posted @ 2020-10-03 16:34  yys_c  阅读(97)  评论(0编辑  收藏  举报