【YbtOJ高效进阶 广搜-2】山峰和山谷

这篇博客介绍了如何利用广度优先搜索(BFS)在给定的n*n网格地图中识别山峰和山谷。文章通过题目描述、样例输入输出,阐述了判断依据:高度相同且周围方格高度不一致的连通块。接着,作者提供了思路,从一个未访问的点开始,比较相邻点高度,根据比较结果判断是山峰、山谷还是两者都不是。最后,给出了代码实现来解决这个问题。
摘要由CSDN通过智能技术生成

链接

YbtOJ高效进阶 广搜-2

题目描述

给定一个 n*n 的网格状地图,每个方格 (i,j) 有一个高度 w i , j w_{i,j} wi,j 。如果两个方格有公共顶点,则它们是相邻的。

定义山峰山谷如下:

均由地图上的一个联通块组成。
所有方格高度都相同。
周围的方格(即不属于山峰或山谷但与山峰或山谷相邻的格子)高度均大于山谷的高度,或小于山峰的高度。
求地图内山峰和山谷的数量。特别的,如果整个地图方格的高度均相同,则整个地图即是一个山谷,也是一个山峰。

有与 (x,y) 有公共顶点的点集是(x,y) 的八连通,直播时口误

样例输入

5
8 8 8 7 7
7 7 8 8 7
7 7 7 7 7 
7 8 8 7 8
7 8 8 8 8

样例输出

2 1

思路

每次找一个新的没访问过的点,然后和相邻的点去进行高度的对比,
1.如果当前连通块的高度比找到的这个点的高度大,那就是山峰
2.如果小,那就是山谷
3.如果有大有小,那就啥也不是
4.如果最后找完了, 都没有大小关系,那就既是山谷,又是山峰

代码

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>

using namespace std;

int n, flag1, flag2, ans1, ans2;
int w[1005][1005], vis[1005
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值