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;

}

全部评论
思路就是遍历所有点,是白子的情况下向四个方向遍历,用q记录此区域白子块的气数,遇到“.”气+1,遇到没添加过的白子就进行push,用一个queue维护的。(坐等大佬
点赞 回复 分享
发布于 02-09 21:19 浙江

相关推荐

不对是145个人…嗯…&nbsp;大家都没发现秋招提前批来了嘛..笑死我了
牛客39712426...:投了也是浪费时间,之前投米实习,除了浪费我时间写笔试题没有任何反馈,懒得投了
26届校招投递进展
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务