C++ 实现计算农夫约翰田地里水塘数量
以下是使用 C++ 解决该问题的代码: ```cpp #include <iostream> #include <vector> using namespace std; // 定义八个方向的偏移量,用于检查相邻的方格 const int dx[8] = {-1, -1, -1, 0, 0, 1, 1, 1}; const int dy[8] = {-1, 0, 1, -1, 1, -1, 0, 1}; // 深度优先搜索函数,用于标记已访问的水方格 void dfs(vector<vector<char>>& field, int x, int y, int n, int m) { // 检查越界或者当前方格不是水的情况 if (x < 0 || x >= n || y < 0 || y >= m || field[x][y] != 'W') { return; } // 标记当前方格为已访问 field[x][y] = '.'; // 遍历八个方向 for (int i = 0; i < 8; ++i) { int nx = x + dx[i]; int ny = y + dy[i]; // 递归调用 dfs 函数 dfs(field, nx, ny, n, m); } } int main() { int n, m; cin >> n >> m; // 定义二维向量来表示田地 vector<vector<char>> field(n, vector<char>(m)); // 读取田地的信息 for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cin >> field[i][j]; } } int ponds = 0; // 遍历整个田地 for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (field[i][j] == 'W') { // 发现一个新的水塘,进行深度优先搜索 dfs(field, i, j, n, m); ponds++; } } } // 输出水塘的数量 cout << ponds << endl; return 0; } ``` ### 代码解释: 1. **方向偏移量**:`dx` 和 `dy` 数组定义了八个方向的偏移量,用于检查相邻的方格。 2. **深度优先搜索(DFS)**:`dfs` 函数用于标记已访问的水方格,并递归地访问其相邻的水方格。 3. **主函数**:读取输入,创建二维向量表示田地,遍历整个田地,当发现一个水方格时,调用 `dfs` 函数进行标记,并增加水塘的数量。 ######[AI问答 | 664点数解答 | 2026-03-28 21:24:22]
- 易语言读取文本文件并显示到超级列表框:代码示例与注意要点(DeepSeek | 571点数解答 | 2025-08-23 20:54:40)228
- 易语言:读取并显示特定文本到超级列表框,还能增加新数据的方法与要点(DeepSeek | 1317点数解答 | 2025-08-23 20:58:40)231
- mallshop商城网站:数据库设计与强大业务功能全揭秘(GPT | 257点数解答 | 2024-12-09 14:08:15)275
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)346
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)316
- C++ 代码实现自定义运算 x@y = x² + y² - xy 及 x@(x+y) 计算(DeepSeek | 215点数解答 | 2025-12-13 15:08:14)75
- C++ 实现根据输入正整数奇偶性计算偶数和或约数和(字节豆包 | 838点数解答 | 2026-02-28 20:23:59)28
- 用Python处理商品销售数据:替换类别、合并类目并输出前5行(百度文心 | 486点数解答 | 2024-08-23 09:14:21)311
- Python 破解:计算序列中满足特定取余条件元素的数量(字节豆包 | 174点数解答 | 2025-05-13 21:29:55)191
- 一文搞定!无名杀“再生安瓿”技能代码全解析及注意事项(字节豆包 | 464点数解答 | 2025-06-15 20:06:30)163
- C# 实现商品类:数量限制 100 及开发注意要点(字节豆包 | 737点数解答 | 2025-09-03 14:44:56)101
- 易语言多线程实战:获取进程信息、读写内存与多线程协同操作(字节豆包 | 790点数解答 | 2025-11-28 03:08:24)40