#include<bits/stdc++.h>
using namespace std;
const int N = 55;
int g[N][N];
int st[N][N];
int n,m;
int num,area[N];
int dx[]={0,-1,0,1},dy[]={-1,0,1,0};
void flood_fill(int x,int y)
{
st[x][y]=1;
area[num]++;
for(int i=0;i<4;i++)
{
//有朝向西北东南的墙时continue
if(g[x][y]>>i&1!=0)continue;
int vx=x+dx[i],vy=y+dy[i];
if(vx>=1&&vx<=n&&vy>=1&&vy<=m)
{
int j;
if(i==1||i==3)j=(i+2)%4;
else if(i==2)j=0; else j=2;
//对墙没被封住
if((g[vx][vy]>>j&1)==0&&!st[vx][vy])
flood_fill(vx,vy);
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
scanf("%d",&g[i][j]);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(!st[i][j])
{
flood_fill(i,j);
num++;
}
}
}
cout<<num<<endl;
int res=0;
for(int i=0;i<num;i++)res=max(res,area[i]);
cout<<res;
return 0;
}
AcWing 1098. 城堡问题
最新推荐文章于 2024-04-28 17:00:28 发布