华为机试题-士兵的任务 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;}}
}

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

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

相关文章

商业模式的深度解析:以四个特点构筑成功之路

商业模式&#xff0c;是企业将产品、服务、信息流、资金流等要素组合在一起&#xff0c;形成独特价值主张&#xff0c;并通过特定的渠道和方式传递给目标市场&#xff0c;从而获取利润的一种系统性设计。一个成功的商业模式&#xff0c;往往具备四个显著特点&#xff1a;重点突…

企业微信如何接入第三方应用?

1.登录企业微信管理后台&#xff1a;https://work.weixin.qq.com/wework_admin​​​​​ 2.点击创建应用&#xff1b; ​​​​​​​ 3. 此时可以看到已经创建好的应用&#xff0c;并且生成应用的唯一id&#xff08;agentId&#xff09; 4. 第三方应用申请域名 (举例&…

智慧楼宇物联网建设实施方案(2)

建设方案 楼宇综合管理平台 智慧楼宇物联网应用综合管理系统是对整个物联网系统的集中监控和展示。其主要功能是对各应用子系统的关键监测数据进行数据格式解析并呈现。进而使管理者能够从整体上对整个物联网系统运行状态有个直观的了解。其不同于各专业子系统的管理软件,重…

flstudio教程如何设置成中文 flstudio基础教程 flstudio免费

Fl studio编曲软件总共有英文和中文两种语言供用户选择&#xff0c;对于我们来说&#xff0c;更习惯于使用中文版本的flstudio编曲软件&#xff0c;包括我自己也比较习惯于使用中文版本的flstudio&#xff0c;同时也能提高工作效率。Flstudio编曲软件默认语言是英文&#xff0c…

vue:功能【xlsx】动态行内合并

场景&#xff1a;纯前端导出excel数据&#xff0c;涉及到列合并、行合并。 注&#xff09;当前数据表头固定&#xff0c;行内数据不固定。以第一列WM为判断条件&#xff0c;相同名字的那几行数据合并单元格。合并的那几行数据&#xff0c;后面的列按需求进行合并。 注&#x…

vue2 elementui 封装一个动态表单复杂组件

封装一个动态表单组件在 Vue 2 和 Element UI 中需要考虑到表单字段的动态添加、删除以及验证等复杂功能。下面是一个简单的例子&#xff0c;展示如何创建一个可以动态添加和删除字段的表单组件。 首先&#xff0c;你需要安装并引入 Element UI&#xff1a; bash 复制 npm in…

CV论文--2024.3.13

1、Sora Generates Videos with Stunning Geometrical Consistency 中文标题:Sora 生成具有惊人几何一致性的视频。 简介&#xff1a;最近发布的 Sora 模型展示了在视频生成领域的出色表现&#xff0c;引发了人们对其模拟真实世界现象能力的激烈讨论。尽管该模型越来越受欢迎&…

如何保证Redis和数据库数据一致性

缓存可以提升性能&#xff0c;减轻数据库压力&#xff0c;在获取这部分好处的同时&#xff0c;它却带来了一些新的问题&#xff0c;缓存和数据库之间的数据一致性问题。 想必大家在工作中只要用了咱们缓存势必就会遇到过此类问题 首先我们来看看一致性&#xff1a; 强一致性…

前端实现生成图片并批量下载,下载成果物是zip包

简介 项目上有个需求&#xff0c;需要根据表单填写一些信息&#xff0c;来生成定制的二维码图片&#xff0c;并且支持批量下载二维码图片。 之前的实现方式是直接后端生成二维码图片&#xff0c;点击下载时后端直接返回一个zip包即可。但是项目经理说后端实现方式每次改个东西…

python基础——列表【创建,下标索引,常见操作方法】

&#x1f4dd;前言&#xff1a; 这篇文章主要讲解一下python中常见的数据容器之一——列表 本文主要讲解列表的创建以及我们常用的列表操作方法 &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;C语言入门基础以及python入门基础 &#x1f380…

泰迪智能科技3月线上培训计划

有学习意向可到 泰迪智能科技官网 咨询了解

Visual Basic6.0零基础教学(3)—焦点概念和深入学习属性

焦点概念和深入学习属性 文章目录 焦点概念和深入学习属性前言一、什么是焦点(Focus)?焦点的特点 二、窗体属性一、窗体的结构二、窗体的属性三、事件四、方法 一.控件属性一. 标签 Label二.文本框 TextBox2.常用事件 三.命令按钮事件 总结 前言 今天我们来继续学习VB中的属性…

Java全系工程源码加密,防止反编译

一、前言 在大约2015年左右&#xff0c;由于公司产品序列逐渐增加&#xff0c;涉及到N多项目部署交付&#xff0c;为了有效防止产品被滥用&#xff0c;私自部署&#xff0c;当时技术中心决定开发一套统一的授权认证管理系统&#xff0c;对公司所有产品序列进行 License 控制。…

【DevSecOps】10种静态应用程序安全测试SAST工具对比

【DevSecOps】10种静态应用程序安全测试SAST工具对比 目录 【DevSecOps】10种静态应用程序安全测试SAST工具对比关于静态应用程序安全测试(SAST)工具的一切知识(常见问题解答)什么是静态应用程序安全测试(SAST)工具?静态应用程序安全测试(SAST)工具是如何工作的?静态…

蓝桥杯历年真题省赛java b组 2016年 第七届 抽签

一、题目 抽签 X星球要派出一个5人组成的观察团前往W星。 其中&#xff1a; A国最多可以派出4人。 B国最多可以派出2人。 C国最多可以派出2人。 .... 那么最终派往W星的观察团会有多少种国别的不同组合呢&#xff1f; 下面的程序解决了这个问题。 数组a[] 中既是每个国家可…

区块链技术的革命性影响

1. 区块链技术的基本原理&#xff1a; 区块链是一种去中心化的分布式数据库技术&#xff0c;通过不断增长的记录&#xff08;块&#xff09;构成一个链式结构。每个区块包含了交易数据的加密信息以及上一个区块的哈希值&#xff0c;从而形成了不可篡改的交易记录。这种去中心化…

Kotlin:为什么创建类不能被继承

一、为什么创建类不能被继承 class或data class 默认情况下&#xff0c;Kotlin 类是最终&#xff08;final&#xff09;的&#xff1a;它们不能被继承。 示例&#xff1a;data class PsersonBean 反编译data class PsersonBean 生成 public final class PsersonBean 示例&…

材料科学类3区SCI,仅13天超快上线见刊,国人友好!!

录用案例 JCR3区材料类SCI (3.31截稿) 【期刊简介】IF&#xff1a;3.0-4.0&#xff0c;JCR3区&#xff0c;中科院4区&#xff1b; 【检索情况】SCI在检&#xff1b; 【征稿领域】低温环境下新型生物降解材料的开发相关或结合研究均可&#xff1b; 【案例分享】重要时间节点…

数据类型(面向对象)

一.基本数据类型 Java中的基本数据类型包括八种&#xff0c;它们都是Java语言内置的&#xff0c;可以直接使用。这八种基本数据类型分别是&#xff1a; byte&#xff1a;字节类型&#xff0c;占用1个字节&#xff08;8位&#xff09;&#xff0c;取值范围从-128到127。short&…

蓝桥杯 java b组 2015年省赛第六届 九数组分数

一、题目 九数组分数 1,2,3...9 这九个数字组成一个分数&#xff0c;其值恰好为1/3&#xff0c;如何组法&#xff1f; 下面的程序实现了该功能&#xff0c;请填写划线部分缺失的代码 public class A { public static void test(int[] x) { int a x[0]*100…