简单dfs
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
char c[25][25];
int temp[5][2]={{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
int n, m, count;
void dfs(int a, int b)
{
if(c[a][b] == '#') return ;
c[a][b] = '#';
count++;
int i, aa, bb;
for( i=0; i < 4; i++ )
{
aa = a + temp[i][0];
bb = b + temp[i][1];
if(aa >= 0 && aa < m && bb >= 0 && bb < n)
dfs(aa, bb);
}
}
int main()
{
while(scanf("%d%d", &n, &m) != EOF && (n || m))
{
getchar();
int i, j, ii, jj;
for( i=0; i < m; i++ )
gets(c[i]);
for(i=0; i < m; i++ )
{
for(j=0; j < n; j++ )
{
if(c[i][j] == '@')
ii=i, jj=j;
}
}
count=0;
dfs(ii, jj);
printf("%d\n", count);
}
return 0;
}