山峰和山谷 Ridges and Valleys
题目描述
思路
一开始看这道题目,也不是很会,谁会把统计之类的问题和bfs联系在一起,没有开始的状态,没有结束的状态,题目中连一个最短之类的词也没有出现。
然后统计嘛,题目中说了方格高度都相同,就把周围的点都看一遍和这个点高度相同的就入队,把高度相同的点都打上浏览的标记。看的过程中,既有比它小的,也有比它大的,那么这种高度的点就不是我们要统计的答案,只有比它小的,或只有比它大的,那么就是我们要统计的。可以设置两个标记,标记看的过程中有没有比它小的,比它大的。
然后就是只有一个高度的时候,因为两个标记都不满足,那么都加1。
然后就是这种题目感觉dfs和bfs都可以做,好像还有一种洪泛法的方法也可以解决。
然后就是抱怨一下bfs有套路,比起dfs要简单,dfs写起来容易,但是怎么表示每一层的状态就比较难,再加上剪枝之类的,qwq······
代码
#include <cstdio>
#include <cstring>
#include <queue>
int n;
int mp[1005][1005], vis[1005][1005], obs[1005][1005];
int dirx[] = {0, -1, -1, -1, 0, 1, 1, 1, 0};
int diry[] = {0, -1, 0, 1, 1, 1, 0,-1,-1};
struct Node {
int x, y;
} tmp, cur;
std::queue<Node> q;
int lows, highs;
inline int read() {
int s = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9') ch = getchar();
while (ch >= '0' && ch <= '9') s = s * 10 + ch - '0', ch = getchar();
return s * f;
}
bool valid(int x, int y) {
if (x < 1 || x > n) return false;
if (y < 1 || y > n) return false;
return true;
}
void bfs(int x, int y) {
while (!q.empty()) q.pop();
tmp.x = x, tmp.y = y;
q.push(tmp);
vis[x][y] = 1;
int z = mp[x][y];
bool low = false, high = false;
while (!q.empty()) {
cur = q.front();
q.pop();
for (int i = 1; i <= 8; ++i) {
tmp.x = cur.x + dirx[i];
tmp.y = cur.y + diry[i];
if (valid(tmp.x, tmp.y)) {
int tz = mp[tmp.x][tmp.y];
if (tz < z) low = true;
if (tz > z) high = true;
if (tz == z && !vis[tmp.x][tmp.y]) {
q.push(tmp);
vis[tmp.x][tmp.y] = 1;
}
}
}
}
if (!low) lows++;
if (!high) highs++;
}
int main() {
n = read();
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
mp[i][j] = read();
}
}
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
if (!vis[i][j]) bfs(i, j);
}
}
printf("%d %d", highs, lows);
return 0;
}
山峰和山谷 Ridges and Valleys的更多相关文章
- 【bfs】BZOJ1102- [POI2007]山峰和山谷Grz
最后刷个水,睡觉去.Bless All! [题目大意] 给定一个地图,为FGD想要旅行的区域,地图被分为n*n的网格,每个格子(i,j) 的高度w(i,j)是给定的.若两个格子有公共顶点,那么他们就是 ...
- BZOJ1102 [POI2007]GRZ山峰和山谷 [BFS]
题目传送门 GRZ山峰和山谷 Description FGD小朋友特别喜欢爬山,在爬山的时候他就在研究山峰和山谷.为了能够让他对他的旅程有一个安排,他想知道山峰和山谷的数量.给定一个地图,为FGD想要 ...
- [POI2007]山峰和山谷Grz
Description FGD小朋友特别喜欢爬山,在爬山的时候他就在研究山峰和山谷.为了能够让他对他的旅程有一个安排,他想知道山峰和山谷的数量.给定一个地图,为FGD想要旅行的区域,地图被分为\(n\ ...
- bzoj1102: [POI2007]山峰和山谷Grz
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- 【POI 2007】 山峰和山谷
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1102 [算法] 广度优先搜索 [代码] #include<bits/stdc+ ...
- 「CSP-S模拟赛」2019第三场
目录 T1 「POI2007」山峰和山谷 Ridges and Valleys 题目 考场思路(几近正解) 正解 T2 「JOI 2013 Final」 现代豪宅 题目 考场思路(正解) T3 「SC ...
- P3456 [POI2007]GRZ-Ridges and Valleys
题意翻译 给定一个地图,为小朋友想要旅行的区域,地图被分为n*n的网格,每个格子(i,j) 的高度w(i,j)是给定的.若两个格子有公共顶点,那么他们就是相邻的格子.(所以与(i,j)相邻的格子有(i ...
- 洛谷 P3456 [POI2007]GRZ-Ridges and Valleys
P3456 [POI2007]GRZ-Ridges and Valleys 题意翻译 给定一个地图,为小朋友想要旅行的区域,地图被分为n*n的网格,每个格子(i,j) 的高度w(i,j)是给定的.若两 ...
- P3456 [POI2007]GRZ-Ridges and Valleys(bfs)
P3456 [POI2007]GRZ-Ridges and Valleys 八个方向都跑一遍bfs,顺便判断一下是山峰还是山谷,或者是山坡(俩都不是) (实在不知道要说啥了qwq) #include& ...
随机推荐
- YY天气使用
前言: 需要使用http获取天气数据,本节说明调用YY天气的http接口获取天气数据 注册: http://www.yytianqi.com/ 登录注册的邮箱验证 验证完成以后: 获取的数据信息: { ...
- Harbor基础
harbor: Harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功 ...
- 创建第一个react项目
前提:已安装部署好nodejs环境 查看nodejs是否安装以及版本 1,win+r输入cmd打开命令行页面 2,路径换到nodejs目录 3,输入node -v查看版本 创建项目 1,win+r输入 ...
- [技术博客] SPRINGBOOT自定义注解
SPRINGBOOT自定义注解 在springboot中,有各种各样的注解,这些注解能够简化我们的配置,提高开发效率.一般来说,springboot提供的注解已经佷丰富了,但如果我们想针对某个特定情景 ...
- 【深入学习linux】CentOS 7 最小化安装后的注意事项及一些必备组件的安装
转载:https://blog.csdn.net/F_Srion/article/details/54910943 在VM虚拟机中安装CentOS 7 时 有时候顾虑到电脑硬件性能,我们需要最小化安装 ...
- TFS变更地址
本文链接:https://blog.csdn.net/qq_31117007/article/details/78044381 1: 今天公司服务器换了IP地址,然后发现tfs的服务器删除不了,也添加 ...
- MIME类型和Java类型
MIME类型和Java类型 类型转换Spring Cloud Stream提供的开箱即用如下表所示:“源有效载荷”是指转换前的有效载荷,“目标有效载荷”是指转换后的“有效载荷”.类型转换可以在“生产者 ...
- pc端常用电脑屏幕 ((响应式PC端媒体查询)电脑屏幕分辨率尺寸大全)
PC端************ 按屏幕宽度大小排序(主流的用橙色标明) 分辨率 比例 | 设备尺寸 1024*500 (8.9寸) 1024*768 (比例4:3 | 10.4寸.12.1寸.1 ...
- C++中rapidxml用法
转载:https://www.cnblogs.com/rainbow70626/p/7586713.html 解析xml是第三方库很多,例如:tingxml,这次学习一下rapidxml,rapidx ...
- CentOS 使用官方源yum安装最新nginx版本
CentOS 使用官方源yum安装最新nginx版本 1.创建nginx.repo # vi /etc/yum.repos.d/nginx.repo 2.添加内容#如果是CentOS6,文件内容如下: ...