如题。
不止一次遇见类似的问题,O2开了又关也没有。这是为什么?
#include<cstdio>
using namespace std;
#define MX 503
const int dx[]={0,0,1,-1},dy[]={1,-1,0,0};
bool mp[503][503]={true};
int n,m,num_0;
int x,y,nx,ny;//position of each step and its next step
int t=1,que[250003]={0};//queue, form like:[h,t) key:x*MX+y
int main(){
//intput
scanf("%d %d\n",&n,&m),num_0=(n+2)*(m+2);
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j) if(getchar()=='*') mp[i][j]=true,--num_0;
getchar();
}
++n,++m;
//BFS
for(int h=0;h<t;++h){
x=que[h]/MX,y=que[h]%MX;
// printf("<%d~%d>:%d->%d,%d\n",h,t,que[h],x,y);
for(int i=0;i<4;++i){
nx=x+dx[i],ny=y+dy[i];
// printf(" <%d,%d>\n",nx,ny);
if(nx<0||ny<0||nx>n||ny>m||mp[nx][ny]) continue;
// printf(" in\n");
que[t++]=nx*MX+ny,mp[nx][ny]=true;
}
}
//output
printf("%d",num_0-t);
return 0;
}