Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 37141 | Accepted: 20181 |
Description
Input
Output
Sample Input
6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 11 9 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ........... 11 6 ..#..#..#.. ..#..#..#.. ..#..#..### ..#..#..#@. ..#..#..#.. ..#..#..#.. 7 7 ..#.#.. ..#.#.. ###.### ...@... ###.### ..#.#.. ..#.#.. 0 0
Sample Output
45 59 6
13
dfs简单应用,用dfs深度搜索,每次遇到'.'就将cnt加一。我的dfs写了好久才对
#include
#include
#define maxn 21
using namespace std;
int vis[maxn][maxn];
char map[maxn][maxn];
int xx[4] = { 0,0,1,-1 };
int yy[4] = { 1,-1,0,0 };
int cnt;
int N, M;
int dfs(int x, int y) {
for (int i = 0; i < 4; i++) {
int nx = x + xx[i];
int ny = y + yy[i];
if (0 <= nx&&nx < N && 0 <= ny&&ny < M &&!vis[nx][ny]&& map[nx][ny] == '.') {
vis[nx][ny] = 1;
cnt++;
dfs(nx, ny);
}
}
return cnt;
}
int main() {
while (1) {
memset(vis, 0, sizeof(vis));
scanf("%d %d", &M, &N);
if (N == 0 || M == 0) break;
getchar();
int a, b;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
scanf("%c", &map[i][j]);
if (map[i][j] == '@') {
a = i; b = j;
}
}
getchar();
}
cnt = 0;
int ans = dfs(a, b);
printf("%d\n", ans+1);
}
return 0;
}