POJ-2386-Lake Counting-解题报告

本文介绍了一个使用递归算法解决的问题,旨在找出二维矩阵中相连的水域(water),将其视为一个池塘(pond),并计算总共有多少个这样的独立池塘。通过遍历矩阵,对每个水域应用递归函数,标记已访问区域以避免重复计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

跟“红与黑”那道题很相似,都是用递归思想解决。

这道也是自己独立解答出来的,一次就AC了,很有些成就感啊。

#include <iostream> using namespace std; const int MAX_SIZE = 100; /*表示田地的矩阵,全局数据*/ char field[MAX_SIZE][MAX_SIZE]; int n, m; /*核心递归函数。 *输入:矩阵坐标i,j。 *输出:与该点相连的有几处"water",即该"pond"有几个"water". */ int count(int i, int j) { if(i < 0 || i >= n || j < 0 || j >= m) return 0; if(field[i][j] == '.') return 0; /*注意,若该点是“water",处理过后,要将该处置为"land", *以防递归时重复调用。这也使计算有几个"pond“时不会重复。 */ field[i][j] = '.'; /*根据题意,八个方向的都算在同一个"pond"*/ return 1 + count(i-1, j-1) + count(i-1, j) + count(i-1, j+1) + count(i, j-1) + count(i, j+1) + count(i+1, j-1) + count(i+1, j) + count(i+1, j+1); } int main() { cin >> n >> m; /*初始化“田地”矩阵。*/ char flag; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { cin >> flag; field[i][j] = flag; } } /*计算共有几个"pond" *注意,已被处理的"W"点,都已置为“.",因此不会出现重复情况。 */ int output = 0; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { /*若“water"数量不为0,表示可以构成一个"pond"*/ if(count(i, j) != 0) output++; } } cout << output << endl; return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值