【正经题解】数水坑
2024-02-21 17:47:06
发布于:浙江
50阅读
0回复
0点赞
#include <iostream>
using namespace std;
const int MAX_N = 109;
char field[MAX_N][MAX_N];
int dx[8] = {0, 1, 0, -1, 1, 1, -1, -1};
int dy[8] = {1, 0, -1, 0, -1, 1, 1, -1};
int n, m;
void dfs(int x, int y) {
field[x][y] = '.'; // 将当前位置标记为已访问
// 遍历八个方向
for (int k = 0; k < 8; k++) {
int nx = x + dx[k], ny = y + dy[k];
// 检查新坐标是否在合法范围内,并且是否为水坑
if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && field[nx][ny] == 'W') {
dfs(nx, ny);
}
}
}
int main() {
cin >> n >> m;
// 读入田地示意图
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> field[i][j];
}
}
int pondCount = 0; // 记录水坑的数量
// 遍历田地
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (field[i][j] == 'W') {
dfs(i, j); // 从当前位置开始进行深度优先搜索
pondCount++; // 每次搜索完成,水坑数量加一
}
}
}
cout << pondCount << endl;
return 0;
}
这里空空如也
有帮助,赞一个