这题就是比较水的一道搜索题了,BFS跟DFS都能做,直接看代码吧!
AC code:
View Code
1 #include <iostream>
2 #define MAX 50
3 using namespace std;
4 int w, h;
5 char map[MAX][MAX];
6 int dir[][2] = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};
7 int count;
8 bool inmap(int x,int y)
9 {
10 return x >= 0 && x < h && y >= 0 && y < w;
11 }
12 void dfs(int x, int y)
13 {
14 map[x][y] = '#';//为了对起点进行改动要把这句放在前面
15 for(int i = 0; i < 4; i++)
16 {
17 int tx = x + dir[i][0];
18 int ty = y + dir[i][1];
19 if(inmap(tx, ty) && map[tx][ty] != '#')
20 {
21 count ++;
22 dfs(tx, ty);
23 }
24 }
25 }
26 int main()
27 {
28 while(scanf("%d%d", &w, &h) != EOF && w)
29 {
30 int i, j;
31 int sx, sy;
32 count = 1;
33 for(i = 0; i < h; i++)
34 scanf("%s", map[i]);
35 for(i = 0; i < h; i++)
36 {
37 for(j = 0; j < w; j++)
38 if(map[i][j] == '@')
39 {
40 sx = i;
41 sy = j;
42 }
43 }
44 dfs(sx, sy);
45 printf("%d\n", count);
46 }
47 return 0;
48 }