华为机试题-士兵的任务 2

2024-03-15 00:36
文章标签 华为 任务 试题 士兵

本文主要是介绍华为机试题-士兵的任务 2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

士兵在迷宫中执行任务,迷宫中危机重重,他需要在在最短的时间内到达指定的位置。你可以告诉土兵他最少需要多长时间吗?
输入一个 n m 的迷宫中,迷宫中 0 为路,1 为墙,2 为起点,3 为终点,4 为陷阱,6 为炸弹。士兵只能向上下左右四个方向移动,如果路径上为墙,不能移动。已知每走一步需要花费 1 个单位的时间,走到陷阱上需要花费 3 个单位的时间,走到炸弹上将会激活炸弹将炸弹上下左右的墙炸为路。
注意点:
1、炸弹只能教毁墙,不会炸掉陷阱
2、炸弹、陷阱只能发挥一次作用
3、迷宫为最大为 25
25
4、用例保证士兵一定有方法能到达终点
解答要求
时间限制: C/C++6000ms,其他语言:12000ms 内存限制:C/C++ 256MB,其他语
言:512MB
输入
第一行:n 和 m
第二行开始:n* m 的矩阵
样例 1
输入:
4 4
1 1 1 1
1 6 2 1
1 1 0 1
1 3 1 1
输出:3
解释:士兵在位置 2,向左移动到炸弹上,会将炸弹周围的墙炸掉,向下走两步即
可到达终点
样例 2
输入:
8 4
1 6 2 1
1 1 0 1
1 1 0 1
1 1 0 1
1 1 0 1
1 1 0 1
1 1 0 1
1 1 3 1
输出:7
解释:士兵在位置 2,向下移动 7 步即可到达终点

参考代码

典型的BFS

import java.util.*;public class soldierMission {static final int[][] DIRECTIONS = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; // 上、下、左、右static final int ROAD = 0, WALL = 1, START = 2, END = 3, TRAP = 4, BOMB = 6;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int[][] maze = new int[n][m];for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {maze[i][j] = scanner.nextInt();}}scanner.close();System.out.println(minTimeToReachDestination(maze));}private static int minTimeToReachDestination(int[][] maze) {int n = maze.length;int m = maze[0].length;Queue<State> queue = new LinkedList<>();boolean[][] visited = new boolean[n][m];int startX = -1, startY = -1;// 寻找起点位置for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (maze[i][j] == START) {startX = i;startY = j;break;}}if (startX != -1) break;}// 起点入队queue.offer(new State(startX, startY, 0));visited[startX][startY] = true;while (!queue.isEmpty()) {State current = queue.poll();if (maze[current.x][current.y] == END) {return current.time;}for (int[] direction : DIRECTIONS) {int newX = current.x + direction[0];int newY = current.y + direction[1];if (newX >= 0 && newX < n && newY >= 0 && newY < m && !visited[newX][newY]) {int newTime = current.time + 1;if (maze[newX][newY] == TRAP) {newTime += 2; // 陷阱需要额外花费2个单位时间}// 如果是炸弹,处理炸弹效果if (maze[newX][newY] == BOMB) {maze[newX][newY] = ROAD; // 炸弹被使用,变为路for (int[] d : DIRECTIONS) {int bombX = newX + d[0];int bombY = newY + d[1];if (bombX >= 0 && bombX < n && bombY >= 0 && bombY < m && maze[bombX][bombY] == WALL) {maze[bombX][bombY] = ROAD; // 炸掉周围的墙}}}visited[newX][newY] = true;queue.offer(new State(newX, newY, newTime));}}}// 如果程序运行到这里,说明迷宫构建有误或逻辑错误throw new IllegalStateException("No path found from start to end.");}// 状态类,保存当前位置和到达当前位置所花费的时间static class State {int x, y, time;State(int x, int y, int time) {this.x = x;this.y = y;this.time = time;}}
}

这篇关于华为机试题-士兵的任务 2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/810245

相关文章

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

FreeRTOS学习笔记(二)任务基础篇

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、 任务的基本内容1.1 任务的基本特点1.2 任务的状态1.3 任务控制块——任务的“身份证” 二、 任务的实现2.1 定义任务函数2.2 创建任务2.3 启动任务调度器2.4 任务的运行与切换2.4.1 利用延时函数2.4.2 利用中断 2.5 任务的通信与同步2.6 任务的删除2.7 任务的通知2

Flink任务重启策略

概述 Flink支持不同的重启策略,以在故障发生时控制作业如何重启集群在启动时会伴随一个默认的重启策略,在没有定义具体重启策略时会使用该默认策略。如果在工作提交时指定了一个重启策略,该策略会覆盖集群的默认策略默认的重启策略可以通过 Flink 的配置文件 flink-conf.yaml 指定。配置参数 restart-strategy 定义了哪个策略被使用。常用的重启策略: 固定间隔 (Fixe

第49课 Scratch入门篇:骇客任务背景特效

骇客任务背景特效 故事背景:   骇客帝国特色背景在黑色中慢慢滚动着! 程序原理:  1 、 角色的设计技巧  2 、克隆体的应用及特效的使用 开始编程   1、使用 黑色的背景: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7d74c872f06b4d9fbc88aecee634b074.png#pic_center)   2

华为OD机试真题-学生方阵-2024年OD统一考试(E卷)

题目描述 学校组织活动,将学生排成一个矩形方阵。 请在矩形方阵中找到最大的位置相连的男生数量。这个相连位置在一个直线上,方向可以是水平的,垂直的,成对角线的或者呈反对角线的。 注:学生个数不会超过10000 输入描述 输入的第一行为矩阵的行数和列数, 接下来的 n行为矩阵元素,元素间用""分隔。 输出描述 输出一个整数,表示矩阵中最长的位

AsyncTask 异步任务解析

1:构建AsyncTask 子类的回调方法: A:doInBackground:   必须重写,所有的耗时操作都在这个里面进行; B: onPreExecute:     用户操作数据前的调用; 例如:显示一个进度条 等 ; C: onPostExecute:    当doInBackground 执行完成后;会自动把数据传给onPostExecute方法;也就是说:这个方法是处理返回的数据的方法

nyoj 288 士兵杀敌(五)

一道插线问线离线版的题  复杂度O(n); 代码如下: #include<stdio.h>#include<string.h>const int M = 1000003;const int mod=10003;int num[M];int main(){int n,c,q;scanf("%d%d%d",&n,&c,&q);while(c--){int a,b,x;scan

华为 HCIP-Datacom H12-821 题库 (13)

有需要题库的可以看主页置顶 1.可以携带外部路由的 tag 标签信息的是以下哪一类 LSA? A、4 类 LSA B、5 类 LSA  C、3 类 LSA  D、2 类 LSA 答案:B 解析: 暂无解析 2..两台路由器直连,并设定网络类型为 p2p 建立OSPF 邻居。那么两台路由器传输 OSPF 报文的目的 IP 地址是以下哪一项? A、使用组播地址 224.0.0.6 B