2018省赛A组第8题

 

吐槽

好难啊!!!!

 

 

#include<bits/stdc++.h>
using namespace std;
char maps[1001][1001];
int n;
bool flag=false;//标记这个岛是否被完全淹没
int vis[1001][1001]={0};//0表示没搜过
int dir[4][2]={
    {0,1},
    {0,-1},
    {1,0},
    {-1,0}
};
void input()
{
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin>>maps[i][j];
        }
    }
}
bool check(int x,int y)
{
    return x>=1&&x<=n&&y>=1&&y<=n&&vis[x][y]==0&&maps[x][y]=='#';
}
void dfs(int x,int y)
{
    vis[x][y]=1;
    if(maps[x][y+1]=='#'&&maps[x][y-1]=='#'&&maps[x-1][y]=='#'&&maps[x+1][y]=='#')
        flag=1;
    for(int i=0;i<4;i++){
        int next_x=x+dir[i][0];
        int next_y=y+dir[i][1];
        if(check(next_x,next_y)){
            dfs(next_x,next_y);
        }
    }
}
void get_result()
{
    int ans=0;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(maps[i][j]=='#'&&vis[i][j]==0){
                flag=0;
                dfs(i,j);
                if(flag==0)
                    ans++;
            }
        }
    }
    cout<<ans;
}
int main()
{
    input();
    get_result();
    return 0;
}

 

posted @ 2021-04-15 22:58  南理工学渣  阅读(24)  评论(0)    收藏  举报