// // main.cpp // poj1979 // // Created by 韩雪滢 on 11/28/16. // Copyright © 2016 韩雪滢. All rights reserved. // #include <iostream> using namespace std; class Tile{ public: bool visited; int color; }; Tile **room; int sum; int w,h; int changeX[4] = {0,0,-1,1};//左,右,上,下 int changeY[4] = {-1,1,0,0}; void dfs(int x,int y){ room[x][y].visited = true; for(int i=0;i<4;i++){ int cx = x + changeX[i]; int cy = y + changeY[i]; if((0 <= cx) &&( cx < w) && (0 <= cy)&& ( cy< h) && !room[cx][cy].visited && (room[cx][cy].color == 0)){ sum++; dfs(cx,cy); } } } int main() { int cx=0,cy=0; while(cin >> h >> w){ if(w>0 && h>0) { sum = 1; room = new Tile*[w]; for(int k=0;k<w;k++){ room[k] = new Tile[h]; for(int m=0;m<h;m++){ room[k][m].color = -2; room[k][m].visited = false; } } for(int i=0;i<w;i++) { for(int j=0;j<h;j++) { char tile; cin >> tile; if(tile == '.') room[i][j].color = 0;// black tile if(tile == '#') room[i][j].color = 1;// white tile if(tile == '@') { room[i][j].color = -1;// people cx = i; cy = j; } } } dfs(cx,cy); cout << sum << endl; } else break; } return 0; }