#include<iostream> #include<cstring> #include<queue> using namespace std; struct N { int x,y; }start,head,tail; char g[20][20]; int w,h,sum,v[20][20],f[][2]={{-1,0},{0,-1},{1,0},{0,1}}; int bfs() { sum=0; memset(v,0,sizeof(v)); v[start.x][start.y]=1; queue<struct N> q; q.push(start); while(!q.empty()) { sum++; head=q.front(); q.pop(); for(int i=0;i<4;i++) { tail.x=head.x+f[i][0]; tail.y=head.y+f[i][1]; if(!v[tail.x][tail.y]&&tail.x>=0&&tail.x<h&&tail.y>=0&&tail.y<w&&g[tail.x][tail.y]=='.') { q.push(tail); v[tail.x][tail.y]=1; } } } return sum; } int main() { int i,j; while(cin>>w>>h,w||h) { for(i=0;i<h;i++) for(j=0;j<w;j++) { cin>>g[i][j]; if(g[i][j]=='@') { start.x=i; start.y=j; } } cout<<bfs()<<endl; } return 0; } /************************************************************** Problem: 2126 User: admin Language: C++ Result: Accepted Time:9 ms Memory:2080 kb ****************************************************************/