洛谷P1596水坑计数
[USACO10OCT] Lake Counting S
题面翻译
由于近期的降雨,雨水汇集在农民约翰的田地不同的地方。我们用一个 W
) 或是旱地(.
)。一个网格与其周围的八个网格相连,而一组相连的网格视为一个水坑。约翰想弄清楚他的田地已经形成了多少水坑。给出约翰田地的示意图,确定当中有多少水坑。
输入第
第 W
或 .
,它们表示网格图中的一排。字符之间没有空格。
输出一行,表示水坑的数量。
题目描述
Due to recent rains, water has pooled in various places in Farmer John's field, which is represented by a rectangle of N x M (1 <= N <= 100; 1 <= M <= 100) squares. Each square contains either water ('W') or dry land ('.'). Farmer John would like to figure out how many ponds have formed in his field. A pond is a connected set of squares with water in them, where a square is considered adjacent to all eight of its neighbors. Given a diagram of Farmer John's field, determine how many ponds he has.
输入格式
Line 1: Two space-separated integers: N and M * Lines 2..N+1: M characters per line representing one row of Farmer John's field. Each character is either 'W' or '.'. The characters do not have spaces between them.
输出格式
Line 1: The number of ponds in Farmer John's field.
样例 #1
样例输入 #1
10 12 W........WW. .WWW.....WWW ....WW...WW. .........WW. .........W.. ..W......W.. .W.W.....WW. W.W.W.....W. .W.W......W. ..W.......W.
样例输出 #1
3
提示
OUTPUT DETAILS: There are three ponds: one in the upper left, one in the lower left, and one along the right side.
代码:
#include<iostream> using namespace std; int n, m,ans; char g[1050][1050]; //int dx[8] = {-1,-1,-1,0,0,1,1,1}; //int dy[8] = {-1,0,1,-1,1,-1,0,1}; int dx[8] = { -1,-1,-1,0,1,1,1,0 }; int dy[8] = { -1,0,1,1,1,0,-1,-1 }; void dfs(int x, int y) { g[x][y] = '.'; for (int i = 0; i < 8; i++) { int a = x + dx[i]; int b = y + dy[i]; if (a < 0 || a >= n || b < 0 || b >= m) continue; if (g[a][b] == '.') continue; dfs(a, b); } } int main() { cin >> n >> m; for (int i = 0; i < n; i++) { cin >> g[i]; } //枚举每一个水坑,只要是水坑,我就进去深搜,并且对每个点做变性手术 for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (g[i][j] == 'W') { ans++; dfs(i, j); } } } cout << ans; return 0; }
- 判断连通性和统计连通块个数的问题,统称
flood fill
(洪水覆盖) - 扫雷,消消乐一类的游戏亦如此。用dfs和bfs都可以解决
- 注意判重,避免死循环
- 判重技巧:节点变性
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)