当前位置: 首页 > news >正文

AcWing 1097:池塘计数 ← Flood fill

【题目来源】
https://www.acwing.com/problem/content/1099/

【题目描述】
农夫约翰有一片 N∗M 的矩形土地。
最近,由于降雨的原因,部分土地被水淹没了。
现在用一个字符矩阵来表示他的土地。
每个单元格内,如果包含雨水,则用”W”表示,如果不含雨水,则用”.”表示。
现在,约翰想知道他的土地中形成了多少片池塘。
每组相连的积水单元格集合可以看作是一片池塘。
每个单元格视为与其上、下、左、右、左上、右上、左下、右下八个邻近单元格相连。
请你输出共有多少片池塘,即矩阵中共有多少片相连的”W”块。

【输入格式】
第一行包含两个整数 N 和 M。
接下来 N 行,每行包含 M 个字符,字符为”W”或”·”,用以表示矩形土地的积水状况,字符之间没有空格。

【输出格式】
输出一个整数,表示池塘数目。

【输入样例】

10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.

【输出样例】
3

【数据范围】
1≤N,M≤1000

【算法分析】
● 泛洪算法(Flood fill)是一种针对 “连通区域” 的处理思想。核心逻辑是:从一个起始点出发,像洪水扩散一样,遍历所有 “相邻且满足相同条件” 的结点(比如同颜色、同数值),并对这些结点进行标记、修改或计数。泛洪算法(Flood fill)常用于从棋盘模型的某个点出发,然后扩展到与这个点相邻的上、下、左、右、左上、右上、左下、右下等八个点
● 典型场景:画图软件里的「油漆桶工具」—— 点击一个红色像素,所有和它连通的红色像素都会被换成蓝色,这个过程就是 Flood fill。
● Flood Fill 是一类 “连通区域填充” 的问题场景 / 算法思想,用 BFS/DFS 都可以实现。但 BFS 是实现 Flood Fill 最常用的核心算法之一。 原因在于,BFS “无栈溢出风险 + 天然支持层级 / 距离计算”,适配 Flood fill 的大多数实际场景。DFS 仅在小网格、无层级需求时更简洁,但稳定性不如 BFS。

【算法代码一:dfs

#include <bits/stdc++.h>
using namespace std;const int N=1e3+5;
char mp[N][N];
int dx[]= {1,1,0,-1,-1,-1,0,1};
int dy[]= {0,1,1,1,0,-1,-1,-1};
int n,m,ans;void dfs(int x,int y) {/*Mark the current position as '.'to indicate that it has been visited,in order to avoid redundant processing.*/mp[x][y]='.';for(int i=0; i<8; i++) {int tx=x+dx[i];int ty=y+dy[i];if(mp[tx][ty]=='W') {dfs(tx,ty);}}
}int main() {cin>>n>>m;for(int i=0; i<n; i++) {for(int j=0; j<m; j++) {cin>>mp[i][j];}}for(int i=0; i<n; i++) {for(int j=0; j<m; j++) {if(mp[i][j]=='W') {dfs(i,j);ans++;}}}cout<<ans<<endl;return 0;
}/*
in:
10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.out:
3
*/

【算法代码二:bfs

#include<bits/stdc++.h>
using namespace std;struct PII {int u;int v;
} pos;const int N=1e3+5;
char mp[N][N];
int dx[]= {1,1,0,-1,-1,-1,0,1};
int dy[]= {0,1,1,1,0,-1,-1,-1};
int n,m,ans;void bfs(int x,int y) {queue<PII> q;pos.u=x, pos.v=y;q.push(pos);while(q.size()) {PII t=q.front();q.pop();for(int i=0; i<8; i++) {int tx=t.u+dx[i],ty=t.v+dy[i];if(tx<0 || ty<0 || tx>=n || ty>=m) continue;if(mp[tx][ty]=='.') continue;mp[tx][ty]='.';pos.u=tx, pos.v=ty;q.push(pos);}}
}int main() {cin>>n>>m;for(int i=0; i<n; i++) {for(int j=0; j<m; j++) {cin>>mp[i][j];}}for(int i=0; i<n; i++) {for(int j=0; j<m; j++) {if(mp[i][j]=='W') {bfs(i,j);ans++;}}}cout<<ans<<endl;return 0;
}/*
in:
10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.out:
3
*/



【参考文献】
https://www.acwing.com/solution/content/130658/
https://blog.csdn.net/qq_52156445/article/details/117133513
https://blog.csdn.net/Jay_fearless/article/details/107947462

 

http://www.jsqmd.com/news/427411/

相关文章:

  • Note - slope trick
  • 零基础部署Nanbeige4.1-3B:3步搞定30亿参数小钢炮,小白也能玩转AI对话
  • 污泥脱水解决方案优选:五大口碑叠螺污泥脱水机品牌排行榜【2026版】 - 品牌推荐大师
  • 基于神经网络的带输出三相逆变器模型预测控制LC滤波器(Matlab代码实现)
  • 深圳靠谱租车公司排行榜 多元用车适配之选 - 优质品牌商家
  • 数字政府2.0:AI赋能政务实践,重构服务与治理新范式
  • 4B参数轻量级视觉模型Youtu-VL-Instruct:开箱即用,实测图片问答与OCR效果
  • Unity游戏开发集成Qwen3智能字幕对齐:实现动态剧情字幕系统
  • OFA-Image-Caption技术解析:深入理解其背后的Transformer与CNN架构
  • 2026年医疗自动化电爪厂家直供:精密力控洁净抓取适配医疗产线 - 品牌2025
  • 上海阳台漏水专业维修 芮生建设14年本土经验一站式解决渗漏难题 - shruisheng
  • HY-Motion 1.0实战教学:从文字到3D动作的完整流程
  • 2026年义乌欧洲超大件物流公司推荐榜:四家实力企业深度解析 - 呼呼拉呼
  • 告别死板UI:Nanbeige 4.1-3B极简WebUI快速部署与体验指南
  • 蜀绣蜀锦礼品专业厂家精选推荐:成都蜀绣厂家、成都蜀绣蜀锦礼品厂家、蜀绣厂家批发价格、蜀绣厂家电话、蜀绣定制厂家选择指南 - 优质品牌商家
  • 【光子 AI】OpenClaw 技术深度研究报告 2026 年 3 月 2 日
  • 2026年自适应夹爪品牌推荐——自适应夹爪工作原理解析 - 品牌2025
  • 工业质检系统升级:Qwen3-VL-Reranker-8B缺陷检索
  • 2026建筑工程钢筋网片强稳型厂家推荐榜 - 优质品牌商家
  • 2026年市场主流三指电爪品牌推荐名单——三指电爪品牌功能详解 - 品牌2025
  • 基于springboot框架的网上购书图书销售商城系统网站的设计与实现_55ap4swk
  • Lingbot-Depth-Pretrain-ViTL-14:驱动AIGC内容创作的深度感知引擎
  • M2LOrder模型Ubuntu 20.04系统部署全流程详解
  • 老年人记不住命令?ShellGPT 是你的终端外挂
  • 腾讯电子签(第三方应用集成+测试环境)
  • 文墨共鸣大模型在卷积神经网络(CNN)图像描述任务中的融合应用
  • GTE-large Web服务高可用实践:Nginx负载均衡+多实例部署+故障自动切换
  • 2026年手提袋印刷哪家好?一份扎实的实战经验分享与工厂榜单 - 企师傅推荐官
  • 2026年3月防火喷塑电缆桥架厂家推荐榜,彰显国产工艺实力 - 品牌鉴赏师
  • Baichuan-M2-32B-GPTQ-Int4部署指南:Java后端服务集成