h是行,w是列
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
char a[25][25];
int w,h,z=1;
int k[4][2]={{-1,0},{0,-1},{0,1},{1,0}};
void f(int x,int y)
{
int i,xx,yy;
a[x][y]='#';//走过的设为墙
for(i=0;i<4;i++)
{
xx=x+k[i][0];//得出下一个坐标
yy=y+k[i][1];
if(xx<0||xx>=h||yy<0||yy>=w)
continue;
if(a[xx][yy]=='.')
{
z++;//条件成立步数加一
f(xx,yy);//递归,继续搜索
}
}
}
int main()
{
int i,j;
while(scanf("%d%d",&w,&h)!=EOF)
{
z=1;
getchar();
if(w==0||h==0)
break;
for(i=0;i<h;i++)
{
scanf("%s",&a[i]);
}
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
{
if(a[i][j]=='@')
{
f(i,j);
}
}
}
printf("%d\n",z);
}
return 0;
}