1. 题目来源
链接:瓷砖
2. 题目说明
3. 题目解析
方法一:dfs+递归+常规解法
深搜模板题,注意在读入数据时不要从数组边界读入,从 map[1][1]
开始读入,防止深搜导致数组溢出的情况。还有就是方向数组的使用,能显著减少那四次的重复代码。
参见代码如下:
#include <iostream>
using namespace std;
int h, w, sx, sy, ans = 1;
char map[55][55];
int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
void dfs(int x0, int y0) {
for (int i = 0; i < 4; ++i) {
int x = x0 + dir[i][0];
int y = y0 + dir[i][1];
if (map[x][y] == '.') {
++ans;
map[x][y] = '#';
dfs(x, y);
}
}
}
int main() {
cin >> h >> w;
for (int i = 1; i <= w; ++i) {
for (int j = 1; j <= h; ++j) {
cin >> map[i][j];
if (map[i][j] == '@') {
sx = i;
sy = j;
}
}
}
dfs(sx, sy);
cout << ans << endl;
return 0;
}