#include #include #include #include using namespace std; class D2 { public: int i, j; D2(){ i = j = 0; } D2( int ii, int jj ){ i = ii; j = jj; } D2 ( const D2 & d ){ i = d.i; j = d.j; } }; vector< string > matrix; int W, H; int di[] = {0, 0, 1, -1}; int dj[] = {1, -1, 0, 0}; void BFS( D2 start ) { vector< vector< bool > > visited ( H, vector< bool > ( W, false ) ); visited[ start.i ][ start.j ] = true; queue< D2 > q; q.push(start); int num = 0; while( !q.empty() ){ D2 d = q.front(); q.pop(); num ++; for( int i = 0 ; i < 4 ; i++ ){ if( d.i + di[ i ] >= 0 && d.i + di[ i ] < H && d.j + dj[ i ] >= 0 && d.j + dj[ i ] < W ) { D2 next( d.i + di[ i ], d.j + dj[ i ] ); if( visited[ next.i ][ next.j ] == false && matrix[ next.i ][ next.j ] == '.' ){ q.push( next ); visited[ next.i ][ next.j ] = true; } } } } cout << num << endl; } void Task( ) { D2 start; bool flag = false; for( int i = 0 ; flag == false && i < H ; i++ ) for( int j = 0 ; flag == false && j < W ; j++ ) if( matrix[ i ][ j ] == '@' ){ start = D2( i, j ); flag = true; } BFS( start ); } bool Read( ) { cin >> W >> H ; if( W == 0 && H == 0 ) return false; matrix = vector< string > ( H, string() ); string tmp; for( int i = 0 ; i < H ; i++ ){ cin >> tmp ; matrix[ i ] = tmp; } return true; } void work() { while( Read( ) ){ Task( ); } } int main() { work(); }