题意:在宽、高不超过20的范围里,从@开始,统计四周有几个.(前后左右,斜方不算)
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s[30][30];
int d[4][2]={0,1,0,-1,1,0,-1,0},vis[30][30];
int n,m;
void DFS(int a,int b,int t)
{
vis[a][b]=1;//把是.的标记
int i,x,y;
for(i=0;i<4;i++){
x=a+d[i][0];
y=b+d[i][1];
//printf("%d %d\n",x,y);
if(x>=0&&y>=0&&x<m&&y<n&&s[x][y]!='#'&&!vis[x][y]){
DFS(x,y,t+1);
}
}
return ;
}
int main()
{
int i,j,a,b,ans;
while(scanf("%d%d",&n,&m),n+m){
memset(s,0,sizeof(s));
memset(vis,0,sizeof(vis));
for(i=0;i<m;i++){
scanf("%s",s[i]);
for(j=0;j<n;j++){
if(s[i][j]=='@'){//找到入口
a=i,b=j;
break;
}
}
}
//ans=1;
DFS(a,b,1);
for(ans=i=0;i<m;i++){
for(j=0;j<n;j++){//统计被标记.的个数
if(vis[i][j]) ans++;
}
}
printf("%d\n",ans);
}
return 0;
}