题目链接:http://poj.org/problem?id=1979
思路:就是一个简单的深度搜索,规定四个方向,遇到 “ . "的时候就可以继续走并且计数。在走过这一步的之后,把这一步的的 " . " 更改为 “#”。
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
const int MAX_N = 50;
int W, H, ans, x, y;
char str[MAX_N][MAX_N];
int dis[4][2] = {-1, 0, 1, 0, 0, -1, 0, 1};
int DFS (int x, int y) {
str[x][y] = '#';
ans ++;
for (int i = 0; i < 4; i++) {
int dx = x + dis[i][0];
int dy = y + dis[i][1];
if (dx >= 0 && dx < H && dy >= 0 && dy < W && str[dx][dy] == '.')
DFS (dx, dy);
}
return ans;
}
int main() {
while (~scanf ("%d %d", &W, &H)) { // W是图的宽, H是图的高度
if (W == 0 && H == 0) break;
ans = 0;
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
cin >> str[i][j];
if (str[i][j] == '@') x = i, y = j;
}
}
printf ("%d\n", DFS (x, y));
}
return 0;
}