一、题目描述
由于下雨,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