E题求调,场上调了半小时了还是没发现错误
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
bool g[N][N];
char f[N][N];
int xx[]={0,1,-1};
int yy[]={0,1,-1};
struct node{
int x;
int y;
};
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>f[i][j];
}
}
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
int num=0;
int flag=1;
if(f[i][j]=='*' && g[i][j]==0){
queue<node>d;
d.push({i,j});
int q=0;
while(!d.empty()){
node w=d.front();
d.pop();
if(g[w.x][w.y]==1)continue;
num++;
g[w.x][w.y]=1;
// cout<<w.x<<' '<<w.y<<endl;
for(int k1=0;k1<=2;k1++){
for(int k2=0;k2<=2;k2++){
if(k1==0 && k2==0)continue;
if(k1!=0 && k2!=0)continue;
// cout<<xx[k1]<<' '<<yy[k2]<<" ";
int dx=w.x+xx[k1];
int dy=w.y+yy[k2];
// cout<<dx<<' '<<dy<<endl;
if(f[dx][dy]=='.' && f[dx][dy]!=n*i+j){
q++;
f[dx][dy]=n*i+j;
}
else if(f[dx][dy]=='*' && g[dx][dy]==0){
d.push({dx,dy});
}
}
}
}
if(q>=2){
flag=0;
break;
}
}
if(flag){
ans=max(ans,num);
}
}
}
cout<<ans<<endl;
}