/*
ID: 551100k1
LANG: C++
TASK: castle
*/
#include<stdio.h>
int room=0,area=0,add=0,X,Y;
int s[55][55],r[55][55]={0},t[55][55],v[55][55]={0};
int d[10][5]={{-1,0},{0,-1},{1,0},{0,1}};
char C;
void ct(int x,int y,int z){
int i;
r[x][y]=z;
t[x][y]=room;
for(i=0;i<4;i++){
if((s[x][y] & (1<<i))==0 && v[x+d[i][1]][y+d[i][0]]==1){
v[x+d[i][1]][y+d[i][0]]=0;
ct(x+d[i][1],y+d[i][0],z);
}
}
}
int dfs(int x,int y){
int i,ans=1;
for(i=0;i<4;i++){
if((s[x][y] & (1<<i))==0 && v[x+d[i][1]][y+d[i][0]]==0){
v[x+d[i][1]][y+d[i][0]]=1;
ans+=dfs(x+d[i][1],y+d[i][0]);
}
}
return ans;
}
int main(){
freopen("castle.in","r",stdin);
freopen("castle.out","w",stdout);
int n,m,i,j,k;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
scanf("%d",&s[i][j]);
for(i=1;i<=m;i++)
for(j=1;j<=n;j++){
if(v[i][j]==0){
v[i][j]=1;
k=dfs(i,j);
if(k>area) area=k;
ct(i,j,k),dfs(i,j),room++;
}
}
for(j=1;j<=n;j++){
for(i=m;i>=1;i--){
if((s[i][j] & 2) && r[i][j]+r[i-1][j]>add && t[i][j]!=t[i-1][j]){
add=r[i][j]+r[i-1][j];
X=j,Y=i,C='N';
}
if((s[i][j] & 4) && r[i][j]+r[i][j+1]>add && t[i][j]!=t[i][j+1]){
add=r[i][j]+r[i][j+1];
X=j,Y=i,C='E';
}
}
}
printf("%d\n%d\n%d\n%d %d %c\n",room,area,add,Y,X,C);
}
沒有留言:
張貼留言