华为0528笔试

第三题

题目

给定一个二维数组 mountainMap 表示一座山的地图,数组中的每个元素 mountainMap[x][y] 代表坐标 (x, y) 处山的高度。登山员从山底出发,爬到山峰。
山底的含义:mountainMap中高度为0的坐标点。
山峰的含义:mountainMap中高度最高的坐标点。
登山员每次移动只能从当前位置向上下左右四个方向移动一格,向高处移动时,移动到的位置山的高度不能高于当前位置的高度加上固定的攀登能力值climbAbility;向低处移动时,移动到的位置的山的高度不能低于当前位置山的高度减去climbAbility。

变量取值范围:
climbAbility:[1,30]
山峰高度:[0,100]
mountainMap的行数mountainMapRows:[2,1000]
mountainMap的列数mountainMapCols:[2,1000]

请计算出从山底移动到山峰,最少需要移动几次?

解答要求:时间限制: C/C++ 1000ms,其他语言: 2000ms 内存限制: C/C++ 256MB,其他语言: 512MB

输入格式
第一行为climbAbility的值
第二行为mountainMapRows mountainMapCols
从第三行开始为mountainMapRows行mountainMapCols列的高度二维数组mountainMap[mountainMapRows][mountainMapCols],每行的高度数字中间用空格分割
输出格式
从山底移动到山峰,最少移动次数。 如果无法移动至山峰,则输出-1

示例1
输入
2
3 2
1 3
0 4
5 3

输出5
解释
攀登能力为2,3行2列的山峰坐标,山底的坐标为(1,0)高度0,山峰的坐标为(2,0)高度5。仅有一条路线 初始位置山底(1,0)高度0->(0,0)高度1->(0,1)高度3->(1,1)高度4->(2,1)高度3->(2,0)高度5 共需要移动5次

示例2
输入1
4 5
1 1 1 1 1
1 0 1 2 1
1 1 1 3 1
1 1 1 1 1
输出3
解释
攀登能力为1,4行5列的山峰坐标,山底的坐标为(1,1),山峰的坐标为(2,3)。 最短路线为 初始位置山底(1,1)高度0->(1,2)高度1->(1,3)高度2->山峰(2,3)高度3 共需要移动3次

示例3
输入1
4 5
1 1 1 1 1
1 0 1 2 1
1 1 1 0 1
1 1 1 1 1
输出-1

解释
无法达到山峰,输出-1

代码

package main.huawei;import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;/*** @ClassName MountainGraph* @Description 华为0528笔试题* @Author Feng* @Date 2025/6/9**/
public class MountainGraph {private static int[][] DIRECTIONS = {{-1,0},{1,0},{0,-1},{0,1}};public static void main(String[] args) {Scanner sc = new Scanner(System.in);int climbAblity = sc.nextInt();int rows = sc.nextInt();int cols = sc.nextInt();sc.nextLine();int[][] mountain = new int[rows][cols];int[] bottom = null;int[] peak = null;int maxHeight = -1;for (int i = 0; i < rows; i++) {String[] line = sc.nextLine().split(" ");for (int j = 0; j < cols; j++) {mountain[i][j] = Integer.parseInt(line[j]);// 找到谷底if (mountain[i][j] == 0) {bottom = new int[]{i, j};}// 找到山顶if (mountain[i][j] > maxHeight) {maxHeight = mountain[i][j];peak = new int[]{i, j};}}}// 计算从谷底到山顶的最短路径int min = minPath(climbAblity, mountain, bottom, peak, maxHeight);System.out.println("min = " + min);}/*** 计算从山谷到山顶的最短路径**/private static int minPath(int climbAblity, int[][] mountain, int[] bottom, int[] peak, int maxHeight) {// 用于标识每个节点是否已经访问过boolean[][] visited = new boolean[mountain.length][mountain[0].length];Queue<int[]> queue = new LinkedList<>();// 将起始节点加入队列, 并标记为已访问queue.offer(new int[]{bottom[0], bottom[1], 0}); // {row, col, steps}visited[bottom[0]][bottom[1]] = true;while (!queue.isEmpty()) {// 取出队首节点int[] current = queue.poll();int row = current[0];int col = current[1];int steps = current[2];// 如果当前节点为山顶,返回步数if (row == peak[0] && col == peak[1]) {return steps;}// 遍历四个方向for (int[] dir : DIRECTIONS) {int newRow = row + dir[0];int newCol = col + dir[1];// 检查新位置是否越界if (newRow >= 0 && newRow < mountain.length && newCol >= 0 && newCol < mountain[0].length){int nextHeight = mountain[newRow][newCol];if (!visited[newRow][newCol] && nextHeight <= climbAblity+mountain[row][col] &&nextHeight >= mountain[newRow][newCol]-climbAblity) {visited[newRow][newCol] = true;queue.offer(new int[]{newRow, newCol, steps + 1});}}}}// 若不存在最短路径,则返回-1return -1;}
}

最少步数问题,使用bfs算法来寻找从山底到山峰的最短路径。 主要思路是: 读取输入数据并找到山底和山峰的坐标 初始化 BFS 队列,从山底开始搜索 每次从队列中取出当前位置,检查四个方向的可能移动 若移动符合高度差限制且未访问过,则加入队列继续搜索 找到山峰时立即返回步数,若队列为空仍未找到则返回 - 1 时间复杂度:O (m*n)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/84303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis的过期策略和淘汰策略

Redis的过期策略和淘汰策略 想象一下周末的大型超市&#xff1a;生鲜区的酸奶贴着"今日特价"标签&#xff0c;促销员定时检查这些商品的保质期&#xff1b;而仓库管理员正根据"先进先出"原则整理货架&#xff0c;确保商品不会过期积压。这种高效的商品管理…

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …

【HarmonyOS 5】 影视与直播详以及 开发案例

&#x1f3a5; ‌一、超高清低延迟直播‌ ‌4K/8K硬解能力‌&#xff1a;通过鸿蒙媒体引擎实现15Mbps码率视频流稳定解码&#xff0c;华为Pura X实测端到端延迟<80ms‌分布式渲染‌&#xff1a;支持手机拍摄→智慧屏导播→平板监看的工作流协同&#xff0c;设备间传输延迟&…

Tunna工具实战:基于HTTP隧道的RDP端口转发技术

工具概述 Tunna是一款利用HTTP/HTTPS隧道进行TCP通信的渗透测试工具&#xff0c;由SECFORCE团队开发并开源。该工具主要应用于需要绕过防火墙限制的场景&#xff0c;通过Webshell实现内网服务的端口转发&#xff0c;特别适合在仅开放80/443端口的环境中建立TCP连接。 项目地址…

c# Autorest解析

AutoRest 工具生成用于访问 RESTful Web 服务的客户端库。AutoRest 的输入是使用 OpenAPI 规范格式描述 REST API 的规范。OpenAPI(f.k.a Swagger)规范代码生成器。支持 C#、PowerShell、Go、Java、Node.js、TypeScript、Python。 安装 AutoRest 在 Windows、MacOS 或 Linux …

高中数学联赛模拟试题精选学数学系列第24套几何题

⊙ O 1 \odot O_1 ⊙O1​ 和 ⊙ O 2 \odot O_2 ⊙O2​ 交于 A A A, B B B. Y Y Y 是 ⊙ O 1 \odot O_1 ⊙O1​ 上一点, Z Z Z 是 ⊙ O 2 \odot O_2 ⊙O2​ 上一点&#xff0c; Y Z YZ YZ 通过 A A A. 过 Y Y Y 的 ⊙ O 1 \odot O_1 ⊙O1​ 的切线和过 Z Z Z 的 ⊙…

【QT】INI格式文件读写类IniApi封装

【QT】INI文件读写类IniApi封装 前言实现INI文件写入方法INI文件读取方法 测试 前言 INI格式文件是一种纯文本格式&#xff0c;使用方括[]定义节&#xff08;Section&#xff09;&#xff0c;每个节下包含键值对&#xff0c;如下图所示。该格式文件简单易读易编辑。而且在所有…

ABAP设计模式之---“童子军法则(The Boy Scout Rule)”

法则介绍 The Boy Scout Rule&#xff0c;中文一般翻译为“童子军法则”&#xff0c;是一个简单却非常有意义的软件开发原则&#xff0c;它最早由软件开发大师 Robert C. Martin (Uncle Bob) 在他的《Clean Code》一书中提出。 这条法则的核心思想非常简单&#xff1a; “确保…

BaikalDB 架构演进实录:打造融合向量化与 MPP 的 HTAP 查询引擎

导读 BaikalDB作为服务百度商业产品的分布式存储系统&#xff0c;支撑了整个广告库海量物料的存储和OLTP事务处理。随着数据不断增长&#xff0c;离线计算时效性和资源需求压力突显&#xff0c;基于同一份数据进行OLAP处理也更为经济便捷&#xff0c;BaikalDB如何在OLTP系统内…

【抖音小程序】通用交易系统-下单问题整理

在通用交易系统中&#xff0c;支付流程如下 1、服务端-预下单&#xff1a;生成参数与签名信息&#xff08;此过程不需要与抖音平台对接&#xff09; 参考 生成下单参数与签名_抖音开放平台 2、小程序用户端&#xff1a;根据返回的参数与签名&#xff0c;拉起抖音支付&#x…

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…

EurekaServer 工作原理

一、核心工作流程 二、核心组件解析 1. 自动配置引擎 入口&#xff1a;EnableEurekaServer 引入 EurekaServerMarkerConfiguration&#xff0c;创建标记Bean Marker触发条件&#xff1a;EurekaServerAutoConfiguration 检测到 Marker 存在时激活关键Bean初始化&#xff1a; …

Playwright 与 Selenium:自动化测试的两大主流工具对比

《Playwright 与 Selenium&#xff1a;自动化测试的两大主流工具对比》 *Playwright 和 Selenium 是自动化测试领域的两大主流工具&#xff0c;二者在架构设计、功能特性和适用场景上存在显著差异&#xff0c;以下是核心对比&#xff1a; 一、架构与设计理念 维度Playwright…

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

R语言速释制剂QBD解决方案之二

影响含量均一性的显著因子&#xff08;%RSD&#xff09; 数据分析表明含量均一性的弯曲性不显著。如半正态图&#xff08;图12&#xff09;所示&#xff0c;影响含量均一性的显著因子为A&#xff08;原料药粒径&#xff09;和C&#xff08;MCC/Lactose&#xff09;。 mod2 <…

大模型原理、架构与落地

近年来&#xff0c;大模型&#xff08;Large Language Models&#xff0c;LLMs&#xff09;在人工智能领域迅猛发展&#xff0c;从GPT-3到GPT-4、Claude、Gemini、文心一言、GLM等模型相继发布&#xff0c;大模型已逐渐走出实验室&#xff0c;迈向产业落地。本文将从技术原理、…

WWDC 2025 macOS 26有哪些更新点

在2025年6月10日凌晨结束的WWDC 2025发布会中&#xff0c;苹果正式发布了全新的macOS 26&#xff0c;并给其命名为Tahoe。 以下为macOS相关的主要内容&#xff1a; 命名方式改变 苹果正式将各大系统的版本号改为对应年份&#xff0c;让命名方式更直观好记&#xff0c;macOS 2…

AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月10日第104弹

从今天开始&#xff0c;咱们还是暂时基于旧的模型进行预测&#xff0c;好了&#xff0c;废话不多说&#xff0c;按照老办法&#xff0c;重点8-9码定位&#xff0c;配合三胆下1或下2&#xff0c;杀1-2个和尾&#xff0c;再杀4-5个和值&#xff0c;可以做到100-300注左右。 (1)定…

.NET 8集成阿里云短信服务完全指南【短信接口】

文章目录 前言一、准备工作1.1 阿里云账号准备1.2 .NET 8项目创建 二、集成阿里云短信SDK2.1 安装NuGet包2.2 配置阿里云短信参数2.3 创建配置类 三、实现短信发送服务3.1 创建短信服务接口3.2 实现短信服务3.3 注册服务 四、创建控制器五、测试与优化5.1 单元测试5.2 性能优化…

解决HuggingFace不能git clone的问题

今天在从HuggingFace上clone项目的时候&#xff0c;一直出现超时问题&#xff0c;查了很多资料没有解决&#xff0c;后来向mentor请教了一下&#xff0c;可以通过镜像的方法解决这个问题&#xff0c;所以把方法放上来&#xff0c;希望对大家有帮助。 HuggingFace的服务器在国外…