code
#include<bits/stdc++.h>
using namespace std;
int n,m;
int id=0;
int a[55][55][4];
int vis[55][55];
int f[55*55];
int to[4][2]={{0,-1},{-1,0},{0,1},{1,0}};
int bfs(int x,int y){
int sum=1;
queue<pair<int,int> > Q;
Q.push({x,y});
while(!Q.empty()){
int i=Q.front().first;
int j=Q.front().second;
Q.pop();
for(int k=0;k<=3;k++){
if(a[i][j][k]) continue;
int tx=i+to[k][0];
int ty=j+to[k][1];
if(vis[tx][ty]!=0) continue;
sum++;
vis[tx][ty]=id;
Q.push({tx,ty});
}
}
return sum;
}
int main(){
scanf("%d%d",&m,&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int x;
scanf("%d",&x);
if(x&1) a[i][j][0]=1;
if(x&2) a[i][j][1]=1;
if(x&4) a[i][j][2]=1;
if(x&8) a[i][j][3]=1;
}
}
int ans=0,ans2=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(!vis[i][j]){
vis[i][j]=++id;
f[id]=bfs(i,j);
ans=max(ans,f[id]);
ans2++;
}
}
}
printf("%d\n%d\n",ans2,ans);
int z1=0,z2,z3;
char z4;
for(int j=1;j<=m;j++){
for(int i=n;i>=1;i--){
for(int k=1;k<=2;k++){
if(a[i][j][k]){
int tx=i+to[k][0];
int ty=j+to[k][1];
if(z1<f[vis[i][j]]+f[vis[tx][ty]] && vis[i][j]!=vis[tx][ty]){
z1=f[vis[i][j]]+f[vis[tx][ty]];
z2=i,z3=j;
if(k==1){
z4='N';
}
else{
z4='E';
}
}
}
}
}
}
printf("%d\n%d %d %c",z1,z2,z3,z4);
}
但我从来没动过这道题