注意char处理, when need to manipluate inputs, take care of previous chars, such as ‘\n’
#define LOCAL
#include <cstdio>
#include <cstring>
#include <algorithm>
#define SIZE 30
using namespace std;
char map[SIZE][SIZE];
int dir[][2] = {0, 1, 0, -1, 1, 0, -1, 0};
int result;
void printmap(int h, int w){
for(int i = 0; i < h; i++){
for(int j = 0; j < w; j++)
printf("%c", map[i][j]);
printf("\n");
}
printf("\n");
}
void dfs(int x, int y, int h, int w){
printf("Result:%d x:%d y:%d\n", result, x, y);
for(int i = 0; i < 4; i++){
int newx = x + dir[i][0];
int newy = y + dir[i][1];
if(0 <= newx && newx < h && 0 <= newy && newy < w
&& map[newx][newy] == '.'){
map[newx][newy] = '#';
result++;
//printmap(h, w);
dfs(newx, newy, h, w);
}
}
}
int main(int argc, char* argv[]){
#ifdef LOCAL
freopen("data.in", "r", stdin);
#endif
int h, w;
int x, y;
while(scanf("%d%d", &w, &h), h || w){
for(int i = 0; i < h; i++){
for(int j = 0; j < w; j++){
scanf("%c", &map[i][j]);
if(map[i][j] == '@'){
x = i;
y = j;
map[i][j] = '#';
}
}
getchar();
}
//printmap(h, w);
result = 1;
dfs(x, y, h, w);
printf("%d\n", result);
}
return 0;
}