简单深搜题
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int map[22][22],w,h,max=1;
int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};
int dfs(int a,int b)
{
int i;
for(i=0;i<4;i++)
if(map[a+dx[i]][b+dy[i]]&&a+dx[i]<h&&a+dx[i]>=0&&b+dy[i]<w&&b+dy[i]>=0) //注意此处a+dx[i]对应h b+dy[i]对应w
{
max++;
map[a+dx[i]][b+dy[i]]=0;
dfs(a+dx[i],b+dy[i]);
}
}
int main()
{
int i,j,r,l;
char ch;
while(scanf("%d %d",&w,&h)==2&&(w||h))
{
memset(map,0,sizeof(map));
for(i=0;i<h;i++)
{
getchar();
for(j=0;j<w;j++)
{
scanf("%c",&ch);
if(ch=='.') map[i][j]=1;
if(ch=='#') map[i][j]=0;
if(ch=='@')
{
map[i][j]=0;
r=i; l=j;
max=1;
}
}
}
dfs(r,l);
printf("%d\n",max);
}
return 0;
}