博客
关于我
【ybtoj】【BFS】【例题2】山峰和山谷
阅读量:319 次
发布时间:2019-03-04

本文共 1219 字,大约阅读时间需要 4 分钟。

【例题2】山峰和山谷


Link


解题思路

一开始就是有点理解错题意了,对就酱,调了半个小时,一整个就是失语极了

周围只有高的,就是山谷

周围只有矮的,就是山峰
有高有矮,谷、峰都不是
没高没矮是山谷也是山峰


Code

#include 
#include
using namespace std;const int way[8][2] = { { -1, 0}, { 1, 0}, { 0, -1}, { 0, 1}, { -1, -1}, { -1, 1}, { 1, -1}, { 1, 1}};int n, a[1010][1010], v[1010][1010], q[1000100][2], h, t, maxn, minn, ans_max, ans_min;bool check(int x,int y) { return (x > 0 && x <= n && y > 0 && y <= n);}void BFS(int x, int y) { maxn = minn = h = t = 0; q[++t][0] = x, q[t][1] = y; while (h++ < t) { for (int i = 0; i < 8; i++) { int xx = q[h][0] + way[i][0]; int yy = q[h][1] + way[i][1]; if (check(xx, yy)) { if (a[xx][yy] == a[x][y]) { if (!v[xx][yy]) { v[xx][yy] = 1; q[++t][0] = xx, q[t][1] = yy; } }else { if (a[xx][yy] > a[x][y]) maxn++;//统计周围高的 if (a[xx][yy] < a[x][y]) minn++;//统计周围矮的 } } } } if (!minn) ans_min++;//周围没有矮的就是山峰 if (!maxn) ans_max++;//周围没有高的就是山谷}int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) scanf ("%d", &a[i][j]); for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) if (!v[i][j]) BFS(i, j); printf("%d %d", ans_max, ans_min); }

转载地址:http://kyiq.baihongyu.com/

你可能感兴趣的文章
Mysql学习总结(16)——Mysql之数据库设计规范
查看>>
Mysql学习总结(17)——MySQL数据库表设计优化
查看>>
Mysql学习总结(18)——Mysql主从架构的复制原理及配置详解
查看>>
Mysql学习总结(19)——Mysql无法创建外键的原因
查看>>
Mysql学习总结(19)——Mysql无法创建外键的原因
查看>>
Mysql学习总结(1)——常用sql语句汇总
查看>>
Mysql学习总结(20)——MySQL数据库优化的最佳实践
查看>>
Mysql学习总结(21)——MySQL数据库常见面试题
查看>>
Mysql学习总结(22)——Mysql数据库中制作千万级测试表
查看>>
Mysql学习总结(23)——MySQL统计函数和分组查询
查看>>
Mysql学习总结(24)——MySQL多表查询合并结果和内连接查询
查看>>
Mysql学习总结(25)——MySQL外连接查询
查看>>
Mysql学习总结(26)——MySQL子查询
查看>>
Mysql学习总结(27)——Mysql数据库字符串函数
查看>>
Mysql学习总结(28)——MySQL建表规范与常见问题
查看>>
Mysql学习总结(29)——MySQL中CHAR和VARCHAR
查看>>
Mysql学习总结(2)——Mysql超详细Window安装教程
查看>>
Mysql学习总结(30)——MySQL 索引详解大全
查看>>
Mysql学习总结(31)——MySql使用建议,尽量避免这些问题
查看>>
Mysql学习总结(32)——MySQL分页技术详解
查看>>