//简单的广度优先搜索 #include<stdio.h> #include<string.h> #include<queue> using namespace std; queue<int> q; char map[25][25],f[25][25]; int di[4][2]={-1,0,1,0,0,-1,0,1}; int w,h; int isin(int m,int n) { if(m>0&&m<=h&&n>0&&n<=w) return 1; return 0; } int bfs(int m,int n) { int num=1; q.push(m);q.push(n); f[m][n]=1; while(!q.empty()) { int a,b,i;a=q.front();q.pop();b=q.front();q.pop(); for(i=0;i<4;i++) { int x=a+di[i][0],y=b+di[i][1]; if(isin(x,y)&&map[x][y]=='.'&&!f[x][y]) { map[x][y]=1; q.push(x);q.push(y); num+=bfs(x,y); } } } return num; } int main() { while(scanf("%d%d",&w,&h)==2) { if(w==0&&h==0) break; int i,a,b,j; memset(f,0,sizeof(f)); for(i=1;i<=h;i++) { scanf("%s",map[i]+1); for(j=1;j<=w;j++) { if(map[i][j]=='@') { a=i;b=j; break; } } } printf("%d/n",bfs(a,b)); } return 0; }