代码结构解析
1. 头文件与命名空间
2. 全局变量定义
* dx和dy数组用于表示从当前位置出发,8 个相邻方向的坐标变化(例如:dx[0]=-1, dy[0]=0表示正上方)。
3. DFS 函数(深度优先搜索)
* 作用:从一个 'W' 出发,递归遍历所有与其相连的 'W',并将它们标记为旱地('.'),从而将一整个相连的水坑 "消除"。
4. 主函数
算法逻辑
1.读取输入:先获取网格的行数n和列数m,再读取整个网格。
2.遍历网格:逐个检查每个单元格,若发现一个未被处理的 'W'(即一个新水坑的起点):
* 调用dfs函数,将该 'W' 及其所有相连的 'W' 都标记为旱地(避免重复计数)。
* 每处理完一个相连的 'W' 区域,就将水坑数量sum加 1。
3.输出结果:最终sum即为水坑的总数量。
示例说明
对于输入样例中的 10×1210×1210×12 网格,代码会:
找到第一个 'W',通过 DFS 将其相连的所有 'W' 标记为 '.',计数 1。
* 继续遍历,找到下一个未被标记的 'W',重复上述过程,计数 2。
* 最后找到第三个独立的 'W' 区域,计数 3。
* 最终输出 3,与样例结果一致。
该算法通过 DFS 实现了对连通区域的遍历,时间复杂度为 O(N×M)O (N×M)O(N×M)(每个单元格最多被访问一次),适合题目中 NNN 和 MMM 不超过 100 的规模。
链接描述1
链接描述2