weinan030416

导航

淹没岛屿

5
..###
##...
#.#..
.....
#####

4

0

#include<bits/stdc++.h>
using namespace std;

bool flag;
char a[1010][1010];
int cnt=0,ans=0,rans=0;
int n;
int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};

void dfs(int x,int y)
{
    if(a[x][y]!='#')
    return;
    if(x>=n||x<0||y>=n||y<0)
    return;
    if(!flag)
    {
        cnt=0;
        for(int i=0;i<4;i++)
        {
            int nx=x+dx[i];
            int ny=y+dy[i];
            if(nx<x&&nx>=0&&ny<y&&ny>=0&&a[nx][ny]!='.')
            {
                cnt++;
            }
        }
        if(cnt==4)
        {
            ans++;
            flag=true;
        }
    }
    a[x][y]='*';
    for(int i=0;i<4;i++)
    {
        int nx=x+dx[i];
        int ny=y+dy[i];
        dfs(nx,ny);
    }
}

int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(a[i][j]=='#')
            {
                rans++;
                flag=false;
                dfs(i,j);
            }
        }
    }
    cout<<rans<<endl;//原来的岛屿 
    cout<<ans<<endl;//现在的岛屿 
    return 0;
}

 

posted on 2023-02-18 11:36  楠030416  阅读(14)  评论(0编辑  收藏  举报