#include<bits/stdc++.h>
using namespace std;
#define inf 1000
int n,m,f[inf*inf],w[inf][inf],sz[inf*inf];
int sum,mxs_=1,mxs,x_,y_,ty;
int adj(int x,int y){return (y-1)*(m+2)+x+4;}
int ff(int x){return f[x]==x?x:f[x]=ff(f[x]);}
void merge(int x,int y){
x=ff(x),y=ff(y);
if(x!=y){
f[x]=y;sum++;
sz[y]+=sz[x];
mxs_=max(mxs_,sz[y]);
}
}
int check(int x,int y){
x=ff(x),y=ff(y);
if(x==y)return sz[x];
else return sz[x]+sz[y];
}
int main(){
cin>>m>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>w[j][i];
f[adj(j,i)]=adj(j,i);
sz[adj(j,i)]=1;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
if((w[j][i]&2)==0)
merge(adj(j,i),adj(j,i-1));
if((w[j][i]&4)==0)
merge(adj(j,i),adj(j+1,i));
}
sum=n*m-sum;
for(int j=1;j<=m;j++)
for(int i=n;i>=1;i--){
if((w[j][i]&2)){
int k=check(adj(j,i),adj(j,i-1));
if(mxs<k)x_=j,y_=i,mxs=k,ty=1;
}
if((w[j][i]&4)){
int k=check(adj(j,i),adj(j+1,i));
if(mxs<k)x_=j,y_=i,mxs=k,ty=2;
}
}
cout<<sum<<'\n'<<mxs_<<'\n'<<mxs<<'\n'<<y_<<' '<<x_<<' ';
cout<<(ty==1?'N':'E');
}
如题,这份代码不吸氧气RE+WA,吸氧AC,求教原理