说是站外题,其实就是P1457的弱化版
但是我就是看不出我代码哪出了问题37pts
#include<bits/stdc++.h>
using namespace std;
int a[100][100],r[10000][2],c[100][100][4],h,t,maxn,ans,n,m;
int fx[4]={0,-1,0,1};
int fy[4]={-1,0,1,0};
void bfs(int sx,int sy)
{
h=t=1;
r[t][0]=sx;
r[t][1]=sy;
int sum=0;
while(h<=t)//遍历房间
{
int x=r[h][0];
int y=r[h][1];
a[x][y]=1;
sum++;
for(int i=0;i<4;i++)
{
if(!c[x][y][i])
{
int tx=x+fx[i];
int ty=y+fy[i];
if(tx>0&&tx<=n&&ty>0&&ty<=m&&!a[tx][ty])
{
r[++t][0]=tx;
r[t][1]=ty;
}
}
}
h++;
}
maxn=max(maxn,sum);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
int x;
scanf("%d",&x);
for(int w=0;w<4;w++)
{
if(!x)break;
c[i][j][w]=x&1;//建墙
x=x>>1;
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(!a[i][j])
{
bfs(i,j);//找房间
ans++;
}
}
}
printf("%d\n%d",ans,maxn);
}