Flood fill 算法简介:

像洪水一样,一圈一圈往外蔓延,像bfs。

flood fill 算法可以在线性复杂度内,找到某个点所在的连通块。

题目分析


来源:acwing

ac代码

#include<bits/stdc++.h>
using namespace std;
#define x first
#define y secondtypedef pair<int, int> PII;const int N = 1010, M = N * N;
int n, m;
char g[N][N];
PII q[M]; // bfs用的队列:数组模拟队列
bool st[N][N]; // 某点是否遍历过// 数组模拟队列
void bfs(int sx, int sy){int hh = 0, tt = 0;q[0] = {sx, sy};st[sx][sy] = true;while( hh <= tt){ // 队列不空时PII t = q[hh ++];// 遍历周围8个相邻点for(int i = t.x -1 ; i <= t.x + 1; i++)for(int j = t.y -1; j <= t.y +1; j ++){// 当前点跳过if(i == t.x && j == t.y) continue;//位置不合法跳过if( i < 0 || i >= n || j <0 || j >= m) continue;// 不是水,跳过; 或者已经遍历过,跳过if(g[i][j] == '.' || st[i][j]) continue;// 该点压入队列,并标记为遍历过q[++ tt]  = {i ,j};st[i][j] = true;}}
}int main(){scanf("%d%d",&n, &m);// 读入1行没有空格,当作字符串来读for(int i = 0; i < n; i++) scanf("%s", g[i]);int cnt = 0; // 统计连通块的个数for(int i = 0; i < n; i++)for( int j = 0; j < m; j ++)if( g[i][j] == 'W' && !st[i][j]){bfs(i, j); // 以(i,j)为起点进行bfscnt ++;}cout << cnt << endl;
}

题目来源

https://www.acwing.com/problem/content/1099/

算法提高课-搜索-Flood fill算法-AcWing 1097. 池塘计数:flood fill、bfs相关推荐

  1. 算法提高课-搜索-双向广搜 AcWing 190. 字串变换:bfs、双向bfs、queue和unordered_map

    题目分析 来源:acwing 分析: 双向广搜主要用在最小步数模型(也称状态图模型)里面,这里整个状态空间一般是指数级别的,用双向广搜可以极大地提高运行效率. 双向广搜,顾名思义,就是从起点和终点都进 ...

  2. 算法提高课-搜索-最小步数模型-AcWing 1107. 魔板:bfs、复杂、八数码类似的题目

    题目分析 来源:acwing 分析: 最小步数模型常用哈希 按照ABC的顺序来搜,得到的是字典序最小的. 这里整幅"图"是一个状态, 装进一个字符串中,然后一个状态改变到另一个状态 ...

  3. 算法提高课-搜索-最短路模型-AcWing 1100. 抓住那头牛:bfs

    题目分析 来源:acwing 分析:bfs求最短步数,需要dist[]数组来记录最短步数. ac代码 #include<bits/stdc++.h> using namespace std ...

  4. 算法提高课-搜索-最短路模型-AcWing 188. 武士风度的牛 :bfs、dist数组记录最小步数

    题目分析 来源:acwing 分析:马走日,这里用bfs遍历马的行走过程,输出到达终点的最小步数. 使用bfs求到每个点的最小步数,需要开一个dist[][]数组,来记录起点到某点的最小步数. 队列里 ...

  5. 算法提高课-搜索-最短路模型-AcWing 1076. 迷宫问题:bfs最短路、路径

    题目分析 分析: bfs求最短路,主要原因是因为bfs是一层一层的搜,当第一次搜到终点的时候,其实就是到终点的最短路. 本题bfs倒着搜,从终点(n-1,n-1)开始搜,记录到每个点的路径nxt[][ ...

  6. 算法提高课-搜索-Flood fill算法-AcWing 1106. 山峰和山谷:flood fill、bfs

    题目分析 来源:acwing 分析:这道题还是flood fill算法的应用,不同点在于八个方向扫描,习惯性采用二重循环来扫描周围的8个方向:其次,这里需要统计周围比它高的和比它矮的,这点用bool变 ...

  7. 算法提高课-搜索-A*(A star)算法-AcWing 179. 八数码:A星算法求解

    题目分析 来源:acwing 分析: A*算法是什么呢? A算法是一种bfs的变式,需要用到一个"估价函数",用来计算任意状态到目标状态所需代价的估计值.然后在搜索中,维护一个堆, ...

  8. 算法提高课-搜索-Flood fill算法-AcWing 1098. 城堡问题:flood fill、bfs

    题目分析 来源:acwing 分析:找房间个数,也就是找连通的个数. 样例画出来的房间个数如下图:其中'|' 和'-'不是墙,只有#是墙. 分析:这题不用建图,直接bfs(flood fill)来做, ...

  9. 算法提高课-搜索-双端队列广搜-AcWing 175. 电路维修:deque、bfs、有点难

    题目分析 来源:acwing 只有边权为0和边权为1,两种情况.什么意思呢?两个点之间存在路径则边权为0,需要转一下连通的边权为1. 每个点可能入队多次,本质上是个dijkstra算法. 下图说明bf ...

最新文章

  1. 通过反射实现IOC功能
  2. php加mysql分页_php mysql 分页函数
  3. Java专家系列:CPU Cache与高性能编程
  4. leetcode 909. 蛇梯棋
  5. 《R语言机器学习:实用案例分析》——1.3节使用函数
  6. 蓝桥杯 ADV-89 算法提高 输出九九乘法表
  7. [CLR via C#]4. 类型基础及类型、对象、栈和堆运行时的相互联系
  8. python 之发送邮件服务[原著] 海瑞博客
  9. 洛谷 P1040 加分二叉树
  10. windows下git ssh密钥生成
  11. linux 怎么连接到网络打印机,如何在网络上的Windows,Mac和Linux PC之间共享打印机...
  12. python查找文件指定内容_python实现在目录中查找指定文件的方法
  13. 佳能打印机 android,佳能打印机app
  14. docker启动redis指定redis.conf参数
  15. 小米联系人删除怎么恢复
  16. 华为服务器修改root密码,云服务器更改root权限设置密码
  17. clion设置为中文_手把手教你去除CLion的中文字符乱码
  18. 第三方理财平台海银财富上市破发,IPO筹划两年募资规模缩水至3千万美元
  19. 分享一个实用的自媒体一键多发平台,关键是能免费用
  20. PyQt5 作图之 pyqtgraph PlotWidget 代码结构拆解

热门文章

  1. PAT刷题 (Java语言)
  2. 技术开发中一些名词解释
  3. python2.7下同步华为云照片的爬虫程序实现
  4. 为模型推断的端部的大小
  5. cocos2d-x坐标系
  6. [翻译]Silverlight2 RC版本发布
  7. srwebsocket 服务器过段时间会关闭_王者荣耀:伽罗大招遭到暗改?开启后直接冷却时间,无法手动关闭...
  8. java的按钮点击事件_[转载]java处理按钮点击事件
  9. 【控制】《多智能体系统的协同群集运动控制》陈杰老师-第1章-绪论
  10. [python] shell模式下面写for循环