题目描述
在一个 w∗h 的矩形广场上,每一块 1∗1 的地面都铺设了红色或黑色的瓷砖。小明现在站在某一块黑色的瓷砖上,他可以从此处出发,移动到上下左右四个相邻的且是黑色的瓷砖上。现在,他想知道,通过重复上述移动所能经过的黑色瓷砖数。
输入
第一行两个正整数 h,w。(2≤h,w≤50)
接下来输入一个二维字符矩阵,每个字符为 “.”,"#","@",分别代表黑色瓷砖,红色瓷砖,初始位置。
输出
输出一个整数,表示可以到达的瓷砖数。
样例输入
11 9
.#.........
.#.#######.
.#.#.....#.
.#.#.###.#.
.#.#..@#.#.
.#.#####.#.
.#.......#.
.#########.
...........
样例输出
59
数据规模与约定
时间限制:1 s
内存限制:256 M
100% 的数据保证 2≤h,w≤50
#include <iostream>
using namespace std;
int n, m, ans = 1, sx, sy;
char map[55][55];
int dir[4][2] = { 0,1,1,0,0,-1,-1,0 };
void func(int x, int y) {
for (int i = 0; i < 4; i++) {
int tx = x + dir[i][0];
int ty = y + dir[i][1];
if (map[tx][ty] == '.') {
map[tx][ty] = '#';
func(tx, ty);
ans++;
}
}
}
int main() {
cin >> m >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> map[i][j];
if (map[i][j] == '@') {
sx = i;
sy = j;
}
}
}
func(sx, sy);
cout << ans << endl;
return 0;
}