题目描述

思路

一开始看这道题目,也不是很会,谁会把统计之类的问题和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;
}

最新文章

  1. mysql 5.6.24安装实例
  2. 玩转Windows服务系列——无COM接口Windows服务启动失败原因及解决方案
  3. 【Android UI】Android开发之View的几种布局方式及实践
  4. var 0bj = []声明报错的小问题
  5. serialize-and-deserialize-bst
  6. WMI使用的WIN32_类库名
  7. Nodejs异步
  8. 在VMware安装Centos再安装Oracle数据库(个人学习使用)
  9. Razor引擎的转换数据类型
  10. 【iOS基础】NSURLConnection
  11. 基于GruntJS前端性能优化
  12. Swift语言指南(四)--类型安全和类型推断
  13. OO设计原则 -- OO设计的原则及设计过程的全面总结
  14. select中的文字垂直居中的问题
  15. v-echart 按需加载
  16. c/c++ 二叉排序树
  17. VMWare14 安装Mac OS系统(图解)
  18. angularjs $$phase
  19. sql 表连接
  20. Feature如何解决参数数量不匹配

热门文章

  1. [RN] React Native 解决 使用 阿里巴巴 矢量图标库 iconfont 图标不垂直居中问题
  2. 【ARC098F】Donation
  3. 【CF241E】Flights
  4. 菜鸟网络Java面试-社招-一面(2019/11)
  5. ex1
  6. Jedis与Jedis连接池
  7. windows获取管理员权限 操作文件
  8. Java事务以及嵌套事务
  9. IntelliJ IDEA多屏后窗口不显示问题解决(用工具一键解决)
  10. SSL证书原理讲解