【代码超详解】POJ 2386 Lake Counting 数湖泊(DFS,0 ms)

一、题目描述
由于下雨,John 的农田的多个部分被水淹没。用 N × M 的长方形来表示农田,每个长方形里如果是W则代表有水,如果是.则代表没水。John 想知道农田里一共有多少块水洼。如果一个格及周围 8 格均存在水,那么认为这些水连续,视为同一块水洼。
第一行两个整数,单个空格分隔,分别为 N 、M ;
接下来 N 行,每行 M 个连续的字符,每个字符只可能是W或.,代表该方格有水或无水。
输出一个数字,代表水洼的数量。

二、算法分析说明与代码编写指导
用 f[i][j] 保存农田的情况。扫描全部方格一次,对所有有水的方格,通过 DFS 扫描周围 8 个方格是否有水。这 8 个方格里,如果任何一个方格有水,则再扫描其周围 8 个格。对经过的任何方格都要标记为.,以免重复计数或进入死循环。当一个方格的周围 8 格全部无水(无论是因为本来就没有水还是因为已经访问过而被清除了有水标记),返回上一层函数。当最初调用的函数的周围 8 格都扫描完毕,退出,并将水洼数 +1 。最后输出结果 r 。

三、AC 代码(0 ms)

#include<cstdio>
#include<cstdlib>
#pragma warning(disable:4996)
unsigned m, n, r = 0; char f[102][102];
inline void 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值