博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 12130 - Summits(BFS+贪心)
阅读量:5281 次
发布时间:2019-06-14

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

UVA 12130 - Summits

题意:给定一个h * w的图,每一个位置有一个值。如今要求出这个图上的峰顶有多少个。峰顶是这样定义的。有一个d值,假设一个位置是峰顶。那么它不能走到不大于该峰顶高度 - d的位置。假设满足这个条件下。而且无法走到更高的山峰,那么它就是峰顶

思路:利用贪心的策略。把全部点丢到优先队列,每次取出最高的峰值開始找,进行广搜。搜的过程中记录下最大值的点的个数。假设这个是峰顶。就加上这个数。

推断是不是峰顶的方法为,假设广搜过程中。不会找到一个点的能到的最高峰值大于它,那么它就是峰顶,能够在广搜过程边广搜边记录下每一个点能到的最大高度,然后这样一来,事实上每一个点都仅仅会搜到一次,复杂度为O(h w log(h * w))

代码:

#include 
#include
#include
#include
using namespace std;const int N = 505;const int D[4][2] = {
{0, 1}, {0, -1}, {1, 0}, {-1, 0}};int t, h, w, d, g[N][N], vis[N][N];struct Point { int x, y, val; Point(int x, int y, int val = 0) { this->x = x; this->y = y; this->val = val; } bool operator < (const Point& a) const { return val < a.val; }};priority_queue
Q;int bfs(int x, int y, int H) { queue
Q; Q.push(Point(x, y)); vis[x][y] = H; int ans = 1; int flag = 1; while (!Q.empty()) { Point u = Q.front(); Q.pop(); for (int i = 0; i < 4; i++) { int xx = u.x + D[i][0]; int yy = u.y + D[i][1]; if (xx < 0 || xx >= h || yy < 0 || yy >= w) continue; if (H - g[xx][yy] >= d) continue; if (vis[xx][yy] > H) { flag = 0; continue; } if (vis[xx][yy] == H) continue; if (g[xx][yy] == H) ans++; vis[xx][yy] = H; Q.push(Point(xx, yy)); } } if (flag) return ans; return 0;}int solve() { memset(vis, -1, sizeof(vis)); int ans = 0; while (!Q.empty()) { Point u = Q.top(); Q.pop(); if (vis[u.x][u.y] != -1) continue; ans += bfs(u.x, u.y, g[u.x][u.y]); } return ans;}int main() { scanf("%d", &t); while (t--) { scanf("%d%d%d", &h, &w, &d); for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { scanf("%d", &g[i][j]); Q.push(Point(i, j, g[i][j])); } } printf("%d\n", solve()); } return 0;}

转载于:https://www.cnblogs.com/lxjshuju/p/6860764.html

你可能感兴趣的文章
spring mvc 拦截器
查看>>
对JavaScript中异步同步机制以及线程深入了解
查看>>
Oracle 默认的几个登陆用户名和密码
查看>>
机器学习算法应用场景实例六十则
查看>>
flush it! 关于数据缓冲区
查看>>
基于变分自编码器(VAE)利用重建概率的异常检测
查看>>
文档流
查看>>
C++:gethostname,gethostbyname获取IP地址和计算机名
查看>>
web移动端浮层滚动阻止window窗体滚动JS/CSS处理
查看>>
LeetCode Min Cost Climbing Stairs
查看>>
第十三讲:外观模式
查看>>
15_获取LayoutInflater的三种方法
查看>>
docker volume
查看>>
free - 显示系统内存信息
查看>>
webstorm快捷键整理
查看>>
【几个常见的分享按钮】(非JiaThis)
查看>>
线程池
查看>>
字符串的排列
查看>>
解决Asp.net MVC3下Web.config开启Custom Errors后Application_Error不触发问题
查看>>
SQL 游标
查看>>