華為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
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84303.shtml
英文地址,請注明出處:http://en.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的服務器在國外…