首页 > 其他分享 >1233. 全球变暖

1233. 全球变暖

时间:2022-11-05 14:46:00浏览次数:105  
标签:连通 1233 int 1010 nx ny && 全球 变暖

https://www.acwing.com/problem/content/1115/
第一步,首先要考虑有多少个连通块,可以直接枚举每个点,对每个点进行一次搜索,与这个点连通的点共同构成一个连通块,数量用cnt表示,在搜索中,检查判断是否会被完全淹没(Flood Fill)

#include<bits/stdc++.h>
using namespace std;
int n;
char a[1010][1010];
int vis[1010][1010]={0};
int d[4][2] = {{0,1}, {0,-1}, {1,0}, {-1,0}};
int flag;  //用于标记这个岛中是否被完全淹没
void dfs(int x, int y){
    vis[x][y] = 1;
    if(a[x][y+1]=='#' && a[x][y-1]=='#' && a[x+1][y]=='#' && a[x-1][y]=='#')//此连通块存在不可淹没的地方
        flag = 1;
    for(int i = 0; i < 4; i++)//继续搜索周围的陆地(拓展连通块)
    { 
        int nx = x + d[i][0], ny = y + d[i][1];
        if(vis[nx][ny]==0 && a[nx][ny]=='#')
            dfs(nx,ny);
    }
}
int main(){
    cin >> n;
    for(int i = 1; i <= n; i++)cin >> a[i];
    int ans = 0 ;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            if(a[i][j]=='#' && vis[i][j]==0){
                flag = 0;
                dfs(i,j);
                if(flag == 0)  //全部被淹
                    ans++;
            }
    cout<<ans<<endl;
    return 0;
}

 

标签:连通,1233,int,1010,nx,ny,&&,全球,变暖
From: https://www.cnblogs.com/lxl-233/p/16860148.html

相关文章