题目链接:http://poj.org/problem?id=1979。
思路:简单的搜索问题,利用DFS即可。代码实现如下:
#include <iostream>
using namespace std;
const int MAXN = 25;
char graph[MAXN][MAXN];
bool visit[MAXN][MAXN];
int w, h, cnt = 0;
struct To
{
int x, y;
};
To to[4] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
void init() {
for (int i = 1; i <= h; i++) {
for (int j = 1; j <= w; j++) {
graph[i][j] = '.';
visit[i][j] = false;
}
}
cnt = 0;
}
void DFS(int s1, int s2) {
visit[s1][s2] = true;
cnt++;
for (int i = 0; i < 4; i++) {
int x1 = s1 + to[i].x;
int y1 = s2 + to[i].y;
if (x1 >= 1 && x1 <= h && y1 >= 1 && y1 <= w && !visit[x1][y1] && graph[x1][y1] != '#') {
DFS(x1, y1);
}
}
}
int main() {
while ((cin >> w >> h) && w && h) {
init();
int s1, s2;
char c;
for (int i = 1; i <= h; i++) {
for (int j = 1; j <= w; j++) {
cin >> c;
graph[i][j] = c;
if (c == '@') {
s1 = i;
s2 = j;
}
}
}
DFS(s1, s2);
cout << cnt << endl;
}
return 0;
}