一二三四五 上山打老虎

蓝桥杯-全球变暖

链接:https://www.acwing.com/problem/content/1235/

代码:

#include<bits/stdc++.h>

using namespace std;
int k=0,n;
char s[1005][1005];
int b[1005][1005];
int dx[]={0,-1,0,1};
int dy[]={-1,0,1,0};
set<int> se;
void bfs(int x,int y){
    b[x][y]=k;
    queue<pair<int,int> >qu;
    qu.push({x,y});
    while(qu.size()){
        x=qu.front().first;
        y=qu.front().second;
        qu.pop();
        b[x][y]=k;
        for(int i=0;i<4;i++){
            int l=x+dx[i];
            int r=y+dy[i];
            if(l<1||r<1||l>n||r>n||s[l][r]!='#'||b[l][r])continue;
            qu.push({l,r});
        }
    }
}
int main (){
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>(s[i]+1);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        if(s[i][j]=='#'&&!b[i][j]){
            k++;
            bfs(i,j);
        }
    int x,y;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++){
            if(s[i][j]=='#'){
            for(int t=0;t<4;t++){
                x=i+dx[t];
                y=j+dy[t];
                if(s[x][y]=='.'){
                    s[i][j]='@';//被淹没
                    break;
                }
            }
            }
        }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        if(s[i][j]=='#')se.insert(b[i][j]);
    cout<<k-se.size();
    return 0;
}
posted @ 2021-04-15 10:38  黒川川  阅读(77)  评论(0)    收藏  举报