rt,下了一个测试点测测,线下测评是对的,放到洛谷上就0分了
#include<bits/stdc++.h>
using namespace std;
int x1,y3,x2,y2,xx,yy,n,m,dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
char f[151][151];
struct node{
int x,y;
}h,p,r;
queue<node> q;
int main(){
scanf("%d%d",&m,&n);
getchar();
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
f[i][j]=getchar();
if(f[i][j]=='@'){
x1=i;y3=j;
}
}
getchar();
}
h.x=x1;h.y=y3;
q.push(h);
f[x1][y3]='*';
while(!q.empty()){
p=q.front();q.pop();
for(int i=0;i<4;i++){
xx=dx[i]+p.x;
yy=dy[i]+p.y;
if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&f[xx][yy]=='.'){
r.x=xx;r.y=yy;
q.push(r);
f[xx][yy]='*';
}
}
}
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(f[i][j]=='*')ans++;
}
}
printf("%d\n",ans);
return 0;
}