|
#include<bits/stdc++.h>
using namespace std;
int dx[4]={0,-1,0,1};
int dy[4]={-1,0,1,0};
int a[51][51][4],q[5001][3];
int p,i,j,n,m,tot=0,maxx=-1;
bool b[51][51];
void bfs(int x,int y){
memset(q,0,sizeof(q));
tot++;
int tail=1,head=0,xx,yy;
q[1][1]=x;q[1][2]=y;b[x][y]=0;
while(head<tail){
head++;
for(int i=0;i<=3;i++){
xx=q[head][1]+dx[i];
yy=q[head][2]+dy[i];
if(xx>0&&xx<=m&&yy>0&&yy<=n)
if(b[xx][yy]==true&&(a[q[head][1]][q[head][2]][0]&(1<<i))==0){
tail++;
b[xx][yy]=false;
q[tail][1]=xx;
q[tail][2]=yy;
}
}
}
maxx=max(tail,maxx);
}
int main(){
memset(b,true,sizeof(b));
scanf("%d%d",&m,&n);
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
scanf("%d",&p);
a[i][j][0]=p;
}
}
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
if(b[i][j]) bfs(i,j);
}
}
printf("%d\n%d\n",tot,maxx);
return 0;
}
|
|