题目分析



来源:acwing

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

ac代码

#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
const int N = 1010, M = N *N;
typedef pair<int,int> PII;
PII q[M];
int n;
bool st[N][N];
int g[N][N];// BFS传的是引用,
void bfs(int sx, int sy, bool& has_higher, bool& has_lower){int hh = 0, tt = 0;q[0] = {sx, sy};st[sx][sy]= true;while( hh <= tt){PII t = q[hh ++];for(int i = t.x-1; i <= t.x +1; i ++)for(int j = t.y -1; j <= t.y +1; j++){if(i < 0 || i >= n || j < 0 || j >= n) continue;if( g[i][j] != g[t.x][t.y]){ // 这是周围的// 周围有个高的if( g[i][j] > g[t.x][t.y]) has_higher = true;// 周围个矮的else has_lower = true;}// 这是连通块else if( ! st[i][j]){q[ ++ tt] = {i,j};st[i][j] = true;}}}
}
int main(){cin >> n;int cnt = 0;for(int i = 0; i< n; i ++)for(int j = 0; j < n; j++)cin >> g[i][j];int peak = 0, valley = 0;for(int i = 0; i < n; i++)for(int j = 0; j < n; j++)//对于每个未遍历过的点,统计连通块if(!st[i][j]){bool has_higher = false, has_lower = false;bfs(i, j, has_higher, has_lower);//周围没有更高的,则山峰++if(!has_higher) peak ++;//周围没有更矮的,则山谷++if(!has_lower) valley++;}cout << peak <<" " << valley << endl;
}

题目来源

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

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

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

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

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

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

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

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

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

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

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

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

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

    Flood fill 算法简介: 像洪水一样,一圈一圈往外蔓延,像bfs. flood fill 算法可以在线性复杂度内,找到某个点所在的连通块. 题目分析 来源:acwing ac代码 #inclu ...

  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. atom搭建markdown环境
  2. 妙用SQL Server聚合函数和子查询迭代求和
  3. java堆与非堆的一些研究_堆和堆傻傻分不清?一文告诉你 Java 集合中「堆」的最佳打开方式...
  4. Flink表转流一例+何时应该使用execute()
  5. 启发式搜索给神经网络_神经科学如何支持UX启发式
  6. C语言中的字节对齐以及其相关处理
  7. vue-cli安装和使用
  8. FutureV接口CallableV接口的使用
  9. Pycharm快捷键及常用设置【建议收藏】
  10. 微信语音识别及网页获取用户信息
  11. Tensor的Broadcasting操作
  12. BZOJ3728 PA2014Final Zarowki
  13. paip.验证码识别---分割.--使用投影直方图
  14. Doris0.13.15升级至0.14.12.4故障[Bug] NPE when replaying CheckConsistencyJob
  15. 计算机电源常见的认证有哪些,看清电源的各种认证
  16. 艾德莱斯绸:“千年时尚”托起新产业
  17. 昆仑数据陈晨:工业大数据真正要做的是智能分析和智能决策丨清数 · 思享会
  18. 记录一个Xcode上传App报错的问题
  19. 树莓派触摸屏连接方法(微雪7寸LCD)
  20. android assets目录下资源,Android之assets资源目录的各种操作

热门文章

  1. 2013年1季度中国汽车品牌口碑研究报告 ——自主A级车
  2. 专线数据维护07/05
  3. Android动画之Tween动画实战
  4. su一键封面插件_插件分享丨一键制作SU爆炸分析图插件分享
  5. 收敛标准对卷积核数量最优值的影响
  6. mysql使用释放资源_数据库--释放mysql数据库资源
  7. 【控制】《鲁棒控制-线性矩阵不等式处理方法》-俞立老师-第10章-滤波器设计
  8. 2.6 处理数据不匹配问题-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  9. 【预告】新房装修网络规划网络布局学习笔记,家庭网络需求文章内容及结构...
  10. 带收缩因子的PSO优化算法