UVA12130 Summits(BFS + 贪心)

UVA12130 Summits(BFS + 贪心)

题目大意:
给你一个h ∗ w 的矩阵,矩阵的每一个元素都有一个值,代表这个位置的高度。

题目要求你找出这个图中有多少个位置是峰值点。从每一个点(高度H)出发遍历这个图有一个要求。就是走过的点的高度不能小于等于H – d;成为峰值点的要求就是从这个点出发走到的位置不能有高度大于H的。

解题思路:
由于图非常大。用dfs肯定不行。将这些点依照高度从大到小的排序。然后每一个点作为起点来遍历,假设找到比这个点大的点就说明不是峰值点。

而且遍历的过程中就会将途中走过的点标记上它能到的最大高度。假设下次要找的这个点已经被标记过了。就说明这个点能够到达更大的高度。肯定不是峰值点,就不须要遍历。

代码:

<span class="hljs-preprocessor">#<span class="hljs-keyword">include</span> <cstdio></cstdio></span>
<span class="hljs-preprocessor">#<span class="hljs-keyword">include</span> <cstring></cstring></span>
<span class="hljs-preprocessor">#<span class="hljs-keyword">include</span> <algorithm></algorithm></span>

<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> <span class="hljs-built_in">std</span>;
<span class="hljs-keyword">const</span> <span class="hljs-keyword">int</span> maxn = <span class="hljs-number">505</span>;

<span class="hljs-keyword">int</span> G[maxn][maxn];
<span class="hljs-keyword">int</span> vis[maxn][maxn];
<span class="hljs-keyword">int</span> n, m, d;

<span class="hljs-keyword">const</span> <span class="hljs-keyword">int</span> dir[<span class="hljs-number">4</span>][<span class="hljs-number">2</span>] = {{<span class="hljs-number">0</span>, -<span class="hljs-number">1</span>}, {<span class="hljs-number">0</span>, <span class="hljs-number">1</span>}, {-<span class="hljs-number">1</span>, <span class="hljs-number">0</span>}, {<span class="hljs-number">1</span>, <span class="hljs-number">0</span>}};

<span class="hljs-keyword">struct</span> Node {

    <span class="hljs-keyword">int</span> x, y, v;
}node[maxn * maxn], q[maxn * maxn];

<span class="hljs-keyword">int</span> cmp (<span class="hljs-keyword">const</span> Node &a, <span class="hljs-keyword">const</span> Node &b) {
    <span class="hljs-keyword">return</span> a.v > b.v;
}

<span class="hljs-keyword">int</span> BFS (<span class="hljs-keyword">int</span> k) {

    <span class="hljs-keyword">int</span> front , rear;
    <span class="hljs-keyword">int</span> cnt = <span class="hljs-number">1</span>;
    front = <span class="hljs-number">0</span>;
    rear = <span class="hljs-number">1</span>;
    q[front] = node[k];
    vis[node[k].x][node[k].y] = node[k].v;
    <span class="hljs-keyword">bool</span> flag = <span class="hljs-number">1</span>;
    <span class="hljs-keyword">while</span> (front < rear) {

        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i < <span class="hljs-number">4</span>; i++) {

            <span class="hljs-keyword">int</span> newx = q[front].x + dir[i][<span class="hljs-number">0</span>];
            <span class="hljs-keyword">int</span> newy = q[front].y + dir[i][<span class="hljs-number">1</span>];
            <span class="hljs-keyword">if</span> (newx < <span class="hljs-number">0</span> || newx >= n || newy < <span class="hljs-number">0</span> || newy >= m)
                <span class="hljs-keyword">continue</span>;

            <span class="hljs-keyword">if</span> (G[newx][newy] > node[k].v) {
                flag = <span class="hljs-number">0</span>;
                <span class="hljs-keyword">continue</span>;
            }
            <span class="hljs-keyword">if</span> (vis[newx][newy] == node[k].v || node[k].v - G[newx][newy] >= d)
                <span class="hljs-keyword">continue</span>;
            vis[newx][newy] = node[k].v;
            <span class="hljs-keyword">if</span> (G[newx][newy] == node[k].v)
                cnt++;
            <span class="hljs-keyword">else</span>
                G[newx][newy] = node[k].v;
            q[rear].x = newx;
            q[rear++].y = newy;
        }
        front++;
    }
    <span class="hljs-keyword">if</span> (flag)
        <span class="hljs-keyword">return</span> cnt;
    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
}

<span class="hljs-keyword">int</span> main () {

    <span class="hljs-keyword">int</span> T;
    <span class="hljs-built_in">scanf</span> (<span class="hljs-string">"%d"</span>, &T);
    <span class="hljs-keyword">while</span> (T--) {

        <span class="hljs-built_in">scanf</span> (<span class="hljs-string">"%d%d%d"</span>, &n, &m, &d);
        <span class="hljs-keyword">int</span> cnt = <span class="hljs-number">0</span>;
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i < n; i++)
            <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> j = <span class="hljs-number">0</span>; j < m; j++) {
                <span class="hljs-built_in">scanf</span> (<span class="hljs-string">"%d"</span>, &G[i][j]);
                node[cnt].x = i;
                node[cnt].y = j;
                node[cnt++].v = G[i][j];
            }

        sort (node, node + cnt, cmp);
        <span class="hljs-built_in">memset</span> (vis, -<span class="hljs-number">1</span>, <span class="hljs-keyword">sizeof</span> (vis));
        <span class="hljs-keyword">int</span> ans = <span class="hljs-number">0</span>;
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i < cnt; i++) {
            <span class="hljs-keyword">if</span> (vis[node[i].x][node[i].y] == -<span class="hljs-number">1</span>) {
                ans += BFS(i);
            }
        }

        <span class="hljs-built_in">printf</span> (<span class="hljs-string">"%d\n"</span>, ans);
    }
    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
}

Original: https://www.cnblogs.com/hrhguanli/p/5121133.html
Author: hrhguanli
Title: UVA12130 Summits(BFS + 贪心)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/546801/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • bilibili动画下载视频批量改名(python)

    bilib应用 在微软商店中下载哔哩哔哩动画,虽然软件UI古老,但是贵在稳定和支持下载 安装以后搜索自己想要的视频,然后缓存下载 下载后进入下载的路径 视频文件重命名 打开自动命令…

    技术杂谈 2023年7月24日
    086
  • 软件测试基础理论(2)

    一, 为什么要进行软件测试 &#x4E3A;&#x4E86;&#x901A;&#x8FC7;&#x8F6F;&#x4EF6;&amp…

    技术杂谈 2023年7月25日
    060
  • Java-泛型

    泛型出现的原因 Java的泛型是在JDK1.5开始才加上的。在此之前的Java是没有泛型的。没有泛型的Java使用起来给人感觉非常的笨重,为了体会泛型带来的好处,来看看如果没有泛型…

    技术杂谈 2023年7月11日
    065
  • Hadoop Ls命令添加显示条数限制參数

    前言 在hadoop的FsShell命令中,预计非常多人比較经常使用的就是hadoop fs -ls,-lsr,-cat等等这种与Linux系统中差点儿一致的文件系统相关的命令.可…

    技术杂谈 2023年5月31日
    0104
  • nm命令学习-看不到static的函数符号表原因分析

    问题: nm -A -l a.out出现如下信息: 0000000020 r func 说明,这个变量在只读数据段,并且是static的。 如果编译a.out时加上 -O3 发现0…

    技术杂谈 2023年6月1日
    076
  • 实践篇丨「QingScan」使用指南

    QingScan是一个安全工具整合系统,解决你平时使用各种工具一个个打开填写扫描目标的繁琐过程。QingScan工具只需要你把URL给它,它会调用市面上各种扫描工具,对URL扫描,…

    技术杂谈 2023年5月31日
    088
  • 最长公共子序列

    题目链接 P1439LIS(Longest Increasing Subsequence)(最长递增子序列)LCS(Longest Common Subsequence)(最长公共…

    技术杂谈 2023年7月11日
    078
  • goreplay 流量重放命令

    // 同步转发并且比对响应结果 cd /production/www/go_replay/ ulimit -n 65000 /usr/local/bin/gor –in…

    技术杂谈 2023年5月30日
    065
  • 全新升级的AOP框架Dora.Interception[6]: 框架设计和实现原理

    目录一、调用链抽象二、基于约定的拦截器定义三、基于调用上下文的依赖注入容器四、拦截器的提供五、调用链的构建六、方法拦截的实现原理七、依赖注入框架的整合八、看看生成的代理类 从设计模…

    技术杂谈 2023年5月31日
    0109
  • 9月份全球认证标准更新(欧盟,俄罗斯)

    欧盟无线产品RED 指令2014/53/EU 已于今年2月将网路安全纳入指令要求,并将于2024年8月1日开始强制实施。 ● 评估重点 确保设备不会破坏网路及其功能或误用网路资源,…

    技术杂谈 2023年6月21日
    0118
  • pwm驱动

    1.1、参考博客 参考的教程如下: 1.2、什么是PWM 脉冲宽度调制(PWM),是英文”Pulse Width Modulation”的缩写,简称脉宽调制…

    技术杂谈 2023年6月21日
    0104
  • Ant Design Pro

    posted @2020-08-10 22:26 dekevin 阅读(143 ) 评论() 编辑 Original: https://www.cnblogs.com/dekevi…

    技术杂谈 2023年5月31日
    089
  • LDAP连接认证错误类型

    ldap连接错误类型: INVALID_CREDENTIALS: 80090308: LdapErr: DSID-0C09042F, comment: AcceptSecurity…

    技术杂谈 2023年5月31日
    087
  • SpringBoot多线程——排队叫号实验模拟(二)

    SpringBoot多线程——排队叫号模拟实验(二) 1. 前言 本文是前面一篇文章的续集。与之前的思路略有出入。先来做个回顾,体检中心需要模拟客户多次排队叫号的流程,现在提出如下…

    技术杂谈 2023年7月24日
    095
  • 推荐 10 本 Go 经典书籍,从入门到进阶(含下载方式)

    书单一共包含 10 本书,分为入门 5 本,进阶 5 本。我读过其中 7 本,另外 3 本虽然没读过,但也是网上推荐比较多的。 虽然分了入门和进阶,但是很多书中这两部分内容是都包含…

    技术杂谈 2023年6月21日
    0120
  • Nacos

    Nacos— Spring Cloud 注册中心 + 配置中心 一.什么是Nacos? Nacos是阿里的一个开源产品,是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决…

    技术杂谈 2023年7月25日
    091
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球