题意:给你一个迷宫地图,让你走。问最多可以走多少个“."
思路:dfs
- 找到起点,然后对起点进行dfs操作。
- dfs操作时,要把当前的位置标志成"#"表示已经走过,然后进行四个方向的遍历。如果当前可以满足不超过范围,且是"."的就继续dfs
代码上的注意:四个方向上的遍历,用一个二维数组比较方便
const int dir[4][2] { { 0,-1 },{ 1,0 },{ 0,1 },{ -1,0 } };
解决问题的代码:
#include <iostream> #include <cstdio> using namespace std; int w, h; int ans = 0; char map[21][21]; const int dir[4][2] { { 0,-1 },{ 1,0 },{ 0,1 },{ -1,0 } }; int bfs(const int x, const int y) { map[x][y] = '#'; ++ans; for (int i = 0; i < 4; i++) { int cur_x = x + dir[i][0]; int cur_y = y + dir[i][1]; if (cur_x >= 0 && cur_x < h&&cur_y >= 0 && cur_y < w&&map[cur_x][cur_y] == '.') bfs(cur_x, cur_y); } return ans; } int main() { while (scanf("%d%d", &w, &h) != EOF) { if (w == 0 && h == 0) break; for (int i = 0; i < h; i++) for (int j = 0; j < w; j++) cin >> map[i][j]; bool flag = true; if (flag) { for (int i = 0; i<h; i++) for (int j = 0; j<w; j++) if (map[i][j] == '@') { cout << bfs(i, j) << endl; flag = false; } } if (!flag) { ans = 0; continue; } } }