本文共 1977 字,大约阅读时间需要 6 分钟。
为了计算农场中的池塘数量,我们可以使用广度优先搜索(BFS)来探索每个连通区域。以下是详细的步骤和代码实现。
visited
。#include#include using namespace std;int main() { int n, m; scanf("%d %d", &n, &m); char grid[n][m]; for (int i = 0; i < n; ++i) { scanf("%s", grid[i]); } bool visited[n][m] = {false}; int count = 0; //八个方向的移动方向 int dirs[8][2] = {{-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1}}; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (grid[i][j] == 'W' && !visited[i][j]) { //启动BFS queue > q; q.push({i, j}); visited[i][j] = true; while (!q.empty()) { pair current = q.front(); q.pop(); for (auto dir : dirs) { int ni = current.first + dir[0]; int nj = current.second + dir[1]; if (ni >= 0 && ni < n && nj >= 0 && nj < m) { if (!visited[ni][nj] && grid[ni][nj] == 'W') { visited[ni][nj] = true; q.push({ni, nj}); } } } } count++; } } } cout << count << endl; return 0;}
scanf
读取N和M的值,然后读取每一行作为grid
二维数组的行。visited
数组用于记录每个格子是否已被访问。这种方法确保了每个水池只被计数一次,效率较高,适用于给定的矩阵尺寸。
转载地址:http://pzgyk.baihongyu.com/