华为OD机试真题——宜居星球改造计划(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

article/2025/6/29 6:11:22

在这里插入图片描述

2025 A卷 200分 题型

本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析;
并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式!

本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》

华为OD机试真题《宜居星球改造计划》:


目录

    • 题目名称:宜居星球改造计划
      • 题目描述
    • Java
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析
    • python
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析
    • JavaScript
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析
    • C++
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析
    • C语言
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析
    • GO
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析


题目名称:宜居星球改造计划


知识点:字符串、广度优先搜索(BFS)、逻辑处理
时间限制:1秒
空间限制:256MB
语言限制:不限


题目描述

2XXX年,人类通过火星大气改造分析,使其具备理论上的宜居条件。由于技术限制,改造需以局部网格进行。待改造区域为 row * column 网格,每个网格的值为:

  • YES:已完成大气改造的宜居区。
  • NO:未改造但可改造的区域。
  • NA:死亡区,不可改造且无法穿过。

规则说明

  1. 初始状态可能存在多个宜居区(YES),每个太阳日单位,宜居区会向上下左右四个方向扩散,将相邻的NO区域自动改造为YES。
  2. 要求计算所有NO区域是否能在有限时间内全部变为YES。若可以,返回改造所需的最短太阳日天数;否则返回 -1
  3. 注意:若初始网格中无YES或存在无法被扩散的NO区域(如被NA包围),则返回-1。

输入描述

  • 输入为 row * column 的网格数据,每行用空格分隔,例如:
    YES YES NO  
    NO NO NO  
    NA NO YES  
    

输出描述

  • 返回改造完成的最小太阳日天数,若无法完成则返回 -1

示例
输入1

YES YES NO  
NO NO NO  
YES NO NO  

输出1

2  

说明:经过2个太阳日,所有NO被改造为YES。

输入2

YES NO NO NO  
NO NO NO NO  
NO NO NO NO  
NO NO NO NO  

输出2

6  

输入3

NO NA  

输出3

-1  

说明:无初始YES,无法开始改造。

输入4

YES NO NO YES  
NO NO YES NO  
NO YES NA NA  
YES NO NA NO  

输出4

-1  

说明:右下角NO被NA包围,无法被扩散。


Java

问题分析

我们需要计算在给定网格中所有NO区域是否可以被初始的YES区域通过四向扩散完全覆盖,并求出所需的最小天数。若存在无法覆盖的NO区域或没有初始YES区域,则返回-1。


解题思路

  1. 输入处理与初始化:读取网格数据,统计初始YES位置和NO总数。
  2. 多源BFS:以所有初始YES为起点进行广度优先搜索,逐层扩散。
  3. 时间计算:每完成一层扩散(即一天),检查是否所有NO已被覆盖。
  4. 结果验证:若扩散结束后仍有未覆盖的NO,返回-1。

代码实现

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);List<String[]> gridLines = new ArrayList<>();// 读取输入构建网格while (scanner.hasNextLine()) {String line = scanner.nextLine().trim();if (line.isEmpty()) continue;gridLines.add(line.split("\\s+"));}if (gridLines.isEmpty()) {System.out.println(-1);return;}int rows = gridLines.size();int cols = gridLines.get(0).length;String[][] grid = new String[rows][cols];Queue<int[]> queue = new LinkedList<>();int remainingNO = 0;// 初始化队列和统计NO数量for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {grid[i][j] = gridLines.get(i)[j];if (grid[i][j].equals("YES")) {queue.add(new int[]{i, j});} else if (grid[i][j].equals("NO")) {remainingNO++;}}}// 无初始YES或全为YESif (queue.isEmpty()) {System.out.println(-1);return;}if (remainingNO == 0) {System.out.println(0);return;}int[][] dirs = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};int days = 0;// BFS处理扩散while (!queue.isEmpty()) {int size = queue.size();boolean hasSpread = false;for (int i = 0; i < size; i++) {int[] pos = queue.poll();for (int[] dir : dirs) {int x = pos[0] + dir[0];int y = pos[1] + dir[1];if (x >= 0 && x < rows && y >= 0 && y < cols && grid[x][y].equals("NO")) {grid[x][y] = "YES";queue.add(new int[]{x, y});remainingNO--;hasSpread = true;}}}if (hasSpread) days++;if (remainingNO == 0) {System.out.println(days);return;}}System.out.println(-1);}
}

代码详细解析

  1. 输入处理:读取输入行并分割成网格数组。
  2. 网格初始化:遍历网格,记录初始YES位置到队列,并统计NO总数。
  3. 边界条件处理
    • 无初始YES直接返回-1。
    • 没有NO时返回0天。
  4. BFS扩散
    • 使用队列进行层次遍历,每次处理一层节点。
    • 对每个节点,检查四向邻居是否为NO,若是则标记为YES并加入队列。
    • 若该层有扩散行为(hasSpread),天数加一。
  5. 结果判断:若所有NO被覆盖,返回天数;否则返回-1。

示例测试

示例1输入:

YES YES NO  
NO NO NO  
YES NO NO  

输出

2

解析

  • 第1天扩散到周围NO,第2天完成剩余扩散。

示例2输入:

NO NA

输出

-1

解析

  • 无初始YES,无法开始扩散。

示例3输入:

YES NO NO YES  
NO NO YES NO  
NO YES NA NA  
YES NO NA NO  

输出

-1

解析

  • 右下角NO被NA包围,无法扩散。

综合分析

  1. 时间复杂度:O(N×M),每个网格节点被访问一次。
  2. 空间复杂度:O(N×M),用于存储网格和队列。
  3. 优势
    • 多源BFS高效:同时处理多个起点,确保最短路径。
    • 实时剪枝:一旦所有NO覆盖立即返回,减少无效计算。
  4. 适用场景:网格规模中等,且扩散路径无复杂障碍时表现最佳。

python

问题分析

我们需要计算在给定网格中所有NO区域是否可以被初始的YES区域通过四向扩散完全覆盖,并求出所需的最短天数。若存在无法覆盖的NO区域或没有初始YES区域,则返回-1。


解题思路

  1. 输入处理:读取网格数据,统计初始YES位置和NO总数。
  2. 多源BFS:以所有初始YES为起点进行广度优先搜索,按层扩散。
  3. 时间计算:每完成一层扩散(即一天),检查是否所有NO已被覆盖。
  4. 结果验证:若扩散结束后仍有未覆盖的NO,返回-1。

代码实现

import sys
from collections import dequedef main():# 读取输入构建网格grid = []for line in sys.stdin:line = line.strip()if not line:continuegrid.append

http://www.hkcw.cn/article/GBqTpZjEwm.shtml

相关文章

西门子PLC的维修

西门子 S7-200 或 SMART-200&#xff0c;基本单元 CPU SR40&#xff0c;有关资料下载移步其官方网站&#xff1a;西门子工业支持中心(Industry Support)。 图1 SMART-200 CPU 1、SR40基本单元故障维修 故障现象&#xff1a;RUN、STOP、ERROR都不亮&#xff0c;初步判断电源故…

解锁盲盒一番赏系统新玩法,打造沉浸式娱乐体验

在盲盒经济蓬勃发展的今天&#xff0c;一番赏以其独特的魅力成为了消费者热衷的娱乐方式。为了让这种娱乐体验更加丰富和精彩&#xff0c;我们推出了全新的盲盒一番赏系统&#xff0c;解锁了一系列新玩法&#xff0c;为用户打造沉浸式的娱乐体验。 我们的系统引入了互动性更强…

文化中国行看端午龙舟赛 少年竞渡展风采

端午节临近,2025年中华龙舟大赛四川巴中恩阳站的比赛于5月30日拉开帷幕。此次比赛特别为16岁以下青少年设置了专属竞技舞台。随着龙舟划破水面,年轻选手们在比赛中展现出了非凡的活力与激情。这不禁让人思考,为什么越来越多的年轻人对这项传统运动产生了浓厚的兴趣?责任编辑…

苏丹接收超290万剂霍乱疫苗 助力疫情控制

5月30日,苏丹卫生部发布声明,宣布290.54万剂霍乱疫苗已运抵苏丹东部港口城市苏丹港。这批疫苗由世界卫生组织参与管理的疫苗供应国际协调小组捐赠,将被送往疫情严重的喀土穆州和北科尔多凡州,并计划在未来几天内为所有1岁以上的公民开展大规模疫苗接种活动。卫生部呼吁目标…

重复的元素x在数组nums中出现的位置

思路与算法 我们可以考虑重复的元素 x 在数组 nums 中出现的位置。如果相邻的 x 之间至少都隔了 2 个位置&#xff0c;那么数组的总长度至少为&#xff1a; 当 n > 2 时&#xff0c;3n−2 > 2n &#xff0c;不存在满足要求的数组。因此一定存在两个相邻的 x &#xff0c…

越南防长:多边合作机制应避免冲突 推动共赢与发展

第22届香格里拉对话会在新加坡举行。5月31日,越南国防部长潘文江在演讲中表示,希望包括香格里拉对话会在内的国际防务论坛以及全球和地区的多边合作机制能够推动合作与避免冲突,实现共赢和减少矛盾。潘文江指出,香格里拉对话会、北京香山论坛、莫斯科国际安全会议、慕尼黑安…

女子用高压锅煮粽子发生爆炸 警惕厨房“炸弹”

端午将至,许多人已经准备好糯米、粽叶和各种馅料,打算在家自制美味的粽子。然而,在使用高压锅煮粽子时要特别小心,以防发生意外。去年,浙江温州一名61岁女子在家中用高压锅煮粽子时,因饭粒堵塞排气孔导致高压锅爆炸,造成她面部及全身多处受伤,尤其是右眼伤势严重。这类…

联邦学习常见问题

1. 联邦学习的发展历程与形成原因 1.1发展历程 萌芽阶段&#xff08;2016年前&#xff09;&#xff1a;分布式机器学习、隐私保护技术&#xff08;如差分隐私&#xff09;的发展为联邦学习奠定基础。 提出阶段&#xff08;2016年&#xff09;&#xff1a;谷歌首次提出“联邦学…

TC4材料参数(Titanium Ti-6Al-4V (Grade 5), 退火处理)

TC4(Ti-6Al-4V Grade 5)是一种中等强度的(αβ)型双相钛合金&#xff0c;含有6%的α稳定元素Al和4%的β稳定元素V。该合金具有优异的综合性能。具有优良的耐蚀性、小的密度、高的比强度及较好的韧性和焊接性等一系列优点&#xff0c;在航空航天、石油化工、造船、汽车&#xff…

上海乐高乐园迎内测游客 开启试运营模式

5月31日是端午佳节的第一天,也是上海乐高乐园度假区开园倒计时35天。当天上午10时,随着首批游客“大手牵小手”走进园区,中国首座乐高乐园正式分阶段开启内部测试和试运营。自此,上海乐高乐园全面进入“测试模式”。8岁的刘星羽开心地表示:“里面每个项目我都想玩,盼了好…

运动员版高考加油海报太燃了 迎接胜利时刻

距离2025年高考还有10天,祝愿所有高考生能够像赛场上的中国体育健儿一样,全力以赴、坚持到底,迎接属于你们的胜利时刻。责任编辑:zhangxiaohua

多地网友目击夜空现不明飞行物 疑似卫星再入大气层

5月30日晚,山东潍坊、日照等地的许多网友在社交媒体发布视频,称夜空中有不明飞行物飞过。江苏、安徽等地的网友也发布了类似视频。相关视频显示,画面中的不明飞行物伴随着不均匀燃烧,有网友猜测这是火流星。网友王女士表示,30日晚8点45分左右,自己和妹妹在潍坊市昌邑县看…

AI赋能SEO关键词策略

内容概要 当前搜索引擎优化领域正经历由人工智能驱动的范式革新。传统关键词研究依赖人工统计与经验判断&#xff0c;而AI技术通过多维数据建模与自然语言处理&#xff0c;实现了从用户行为分析到语义关联挖掘的系统升级。具体而言&#xff0c;智能语义解析技术可穿透表层搜索…

切换人像背景

通过百度网盘分享的文件&#xff1a;语义分割弹幕.zip 链接&#xff1a;https://pan.baidu.com/s/19KLTPmfMPFmNAQkmnriuYg?pwd9jnm 提取码&#xff1a;9jnm --来自百度网盘超级会员V2的分享 面向对象 相关程序在面向对象.py中 # 定义两个学生字典&#xff0c;包含学生的…

智慧赋能充电桩管理:我国新能源充电桩建设现状与突破路径

随着“双碳”目标的推进和新能源汽车产业的蓬勃发展&#xff0c;充电桩作为关键基础设施&#xff0c;其建设与管理水平直接影响着新能源车的普及效率。近年来&#xff0c;我国充电桩数量快速增长&#xff0c;但仍面临布局失衡、利用率低、运维粗放等问题。如何通过智慧化手段提…

国际调解院公约签署仪式在港成功举行 多国代表共襄盛举

5月30日,国际调解院公约签署仪式在香港举行。中共中央政治局委员、外交部长王毅出席并致辞。来自亚洲、非洲、拉美和欧洲85个国家和近20个国际组织的高级别代表约400人出席,33个国家现场签署公约,成为创始成员国。王毅表示,三年前中国与志同道合的国家共同倡议建立国际调解…

ida调试--练题

文章分享IDA动态调试&#xff1a;从本地到远程的全能逆向神器-CSDN博客 一&#xff0e; [SWPUCTF 2023 秋季新生赛]IDA动态调试 点开ff1看看 随便下一个断点F9一下 F5反汇编 所以v2就是flag&#xff0c;点开v2 NSSCTF{this_1111s_50_3asy} 二&#xff0e;[SWPUCTF 2024 秋季新…

河南老板让员工带薪回家收麦 暖心举措获赞

河南省矿山起重机有限公司再次展现了其对员工的关怀。5月30日,在“三夏”生产及端午节来临之际,公司向5200多名员工发放了超过500万元现金,这一举动引发了网友们的羡慕。除了现金外,家中有耕地的员工还可以享受带薪假期回家收麦,且不限制假期天数。一位员工透露,董事长还…

这款手办被认定为淫秽物品!法官详解审查细节

庭审过程中,合议庭严格按照法定程序,组织控辩双方进行了充分举证、质证和辩论。面对环环相扣的证据链,被告人孟某接受了其制作的涉案手办属于淫秽物品的认定结果,并认可相应的判决结果。不久前,上海市宝山区人民法院对一起手办涉黄案作出判决,以制作、贩卖淫秽物品牟利罪…

Windows SSDT Hook(二)

获取SSDT基址 在32位Windows系统中&#xff0c;SSDT&#xff08;System Service Descriptor Table&#xff09;作为系统服务调用的核心数据结构&#xff0c;其基址信息是公开且稳定的。由于ntoskrnl.exe内核模块默认导出KeServiceDescriptorTable符号&#xff0c;开发者只需使…