#include<iostream>
using namespace std;
const int N=1005;
int a[N][N],vis[N][N],n,m;
struct T{
int x;
int y;
}q[N*N][N*N],p[N];
bool can(int x,int y){
if(a[x-1][y]||a[x+1][y]||a[x][y+1]||a[x][y-1])return false;
return true;
}
bool ok(int x,int y){
if(x<1||x>n||y<1||y>n)return false;
return true;
}
int main(){
int ans=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(!can(i,j)||a[i][j]||vis[i][j])continue;
int l=1,r=0,c=1,top=0;
r++;
q[r].x=i;
q[r].y=j;
vis[i][j]=1;
while(l<=r){
int x=q[l].x;
int y=q[l].y;
l++;
if(!can(x,y)){
p[++top]={x,y};
continue;
}
if(ok(x-1,y)){
vis[x-1][y]=1;
c++;
q[++r]={x-1,y};
if(ok(x+1,y)){
vis[x+1][y]=1;
c++;
q[++r]={x+1,y};
if(ok(x,y+1)){
vis[x][y+1]=1;
c++;
q[++r]={x,y+1};
if(ok(x,y-1)){
vis[x][y-1]=1;
c++;
q[++r]={x,y-1};
}
}
}
}
}
for(int i=1;i<=top;i++)vis[p[i].x][p[i].y]=0;
ans=max(ans,c);
}
}
}
编译信息如下:
