#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
char s[30][30];
int vis[30][30];
int r,c;int ans;
void dfs(int x,int y){
if(vis[x][y]||x<0||x>=r||y<0||y>=c||s[x][y]=='#') return;
++ans;
vis[x][y]=1;
dfs(x,y-1);dfs(x,y+1);dfs(x-1,y);dfs(x+1,y);
}
int main(){
while(scanf("%d%d",&c,&r)==2&&c){
int x,y;
for(int i=0;i<r;++i){
scanf("%s",s[i]);
for(int j=0;j<c;++j){
if(s[i][j]=='@'){x=i;y=j;}
}
}
memset(vis,0,sizeof(vis));
ans=0;
dfs(x,y);
printf("%d\n",ans);
}
return 0;
}
两个注意点:
- Line 9最后一个条件不能写成
s[x][y]!='.'
- 读取时,不能按字符读取,否则必须考虑换行符的问题,因而只能读完再遍历从而得到初始情况人的位置。