简单的dfs
#include <algorithm>
#include <cstring>
#include <iostream>
#include <map>
#include <set>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
using namespace std;
class Solution {
private:
int ans = 1;
int distance[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
void dfs(int x, int y, vector<vector<char>> &vec) {
vec[x][y] = '*';
for (int i = 0; i < 4; ++i) {
int mx = distance[i][0] + x;
int my = distance[i][1] + y;
if (0 <= mx && mx < (int)vec.size() && 0 <= my &&
my < (int)vec[0].size() && vec[mx][my] == '.') {
++ans;
dfs(mx, my, vec);
}
}
}
public:
void solve() {
int w, h;
while (cin >> w >> h) {
this->ans = 1;
if (w == 0 && h == 0) {
break;
}
vector<vector<char>> vec;
vec.resize(h, vector<char>(w, 0));
for (int i = 0; i < h; ++i) {
for (int j = 0; j < w; ++j) {
cin >> vec[i][j];
}
}
for (int i = 0; i < h; ++i) {
for (int j = 0; j < w; ++j) {
if (vec[i][j] == '@') {
dfs(i, j, vec);
}
}
}
cout << ans << endl;
}
}
};
int main() {
Solution s;
s.solve();
return 0;
}