华为OD机试真题——宜居星球改造计划(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
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:死亡区,不可改造且无法穿过。
规则说明
- 初始状态可能存在多个宜居区(YES),每个太阳日单位,宜居区会向上下左右四个方向扩散,将相邻的NO区域自动改造为YES。
- 要求计算所有NO区域是否能在有限时间内全部变为YES。若可以,返回改造所需的最短太阳日天数;否则返回 -1。
- 注意:若初始网格中无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。
解题思路
- 输入处理与初始化:读取网格数据,统计初始YES位置和NO总数。
- 多源BFS:以所有初始YES为起点进行广度优先搜索,逐层扩散。
- 时间计算:每完成一层扩散(即一天),检查是否所有NO已被覆盖。
- 结果验证:若扩散结束后仍有未覆盖的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);}
}
代码详细解析
- 输入处理:读取输入行并分割成网格数组。
- 网格初始化:遍历网格,记录初始YES位置到队列,并统计NO总数。
- 边界条件处理:
- 无初始YES直接返回-1。
- 没有NO时返回0天。
- BFS扩散:
- 使用队列进行层次遍历,每次处理一层节点。
- 对每个节点,检查四向邻居是否为NO,若是则标记为YES并加入队列。
- 若该层有扩散行为(
hasSpread
),天数加一。
- 结果判断:若所有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包围,无法扩散。
综合分析
- 时间复杂度:O(N×M),每个网格节点被访问一次。
- 空间复杂度:O(N×M),用于存储网格和队列。
- 优势:
- 多源BFS高效:同时处理多个起点,确保最短路径。
- 实时剪枝:一旦所有NO覆盖立即返回,减少无效计算。
- 适用场景:网格规模中等,且扩散路径无复杂障碍时表现最佳。
python
问题分析
我们需要计算在给定网格中所有NO区域是否可以被初始的YES区域通过四向扩散完全覆盖,并求出所需的最短天数。若存在无法覆盖的NO区域或没有初始YES区域,则返回-1。
解题思路
- 输入处理:读取网格数据,统计初始YES位置和NO总数。
- 多源BFS:以所有初始YES为起点进行广度优先搜索,按层扩散。
- 时间计算:每完成一层扩散(即一天),检查是否所有NO已被覆盖。
- 结果验证:若扩散结束后仍有未覆盖的NO,返回-1。
代码实现
import sys
from collections import dequedef main():# 读取输入构建网格grid = []for line in sys.stdin:line = line.strip()if not line:continuegrid.append
相关文章:

华为OD机试真题——宜居星球改造计划(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《宜居…...
C#实现图片缩略图生成:多种模式详解与实践
C#实现图片缩略图生成:多种模式详解与实践 在图像处理的场景中,生成图片缩略图是一项常见且实用的功能。无论是搭建图片展示网站,还是开发本地图片管理工具,按需生成合适尺寸的缩略图,能够有效减少图片传输和显示所需…...

Linux下基本指令的介绍
目录 1.目标 2.快速认识指令 1.pwd 2.clear 3.ls 4.mkdir 5.cd 6.touch 3.细化每一条指令 1.ls指令 2.pwd指令 注: 3.cd指令 4.touch和mkdir指令 6.删除文件 4.总结 1.目标 上一篇博客中,我们了解了Linux的起源和发展,也知道…...

零基础开始的网工之路第十四天------Linux程序管理
目录 一、Linux程序与进程 1、程序,进程,线程的概念 2、程序和进程的区别 3、进程和线程的区别 二、Linux进程基础(生命周期) 1、进程生命周期 2、父子进程的关系 三、程序管理 1、常见的软件包类型 四、Linux操作系统启动流程详解 1、概述 2、启动流程核心阶段 1…...

SIGGRAPH 2025 | 快手可灵团队提出3D感知的电影级文本到视频生成框架CineMaster
Sora、可灵等视频生成模型令人惊艳的性能表现使得创作者仅依靠文本输入就能够创作出高质量的视频内容。然而,我们常见的电影片段通常是由导演在一个场景中精心布置多个目标的运动、摄像机拍摄角度后再剪辑而成的。例如,在拍摄赛车追逐的场景时࿰…...

历年西安电子科技大学计算机保研上机真题
2025西安电子科技大学计算机保研上机真题 2024西安电子科技大学计算机保研上机真题 2023西安电子科技大学计算机保研上机真题 在线测评链接:https://pgcode.cn/school 查找不同的连续数字串个数 题目描述 给定一个数字串,查找其中不同的连续数字串的个…...

利用openwrt路由器和随身WIFI搭建CPE
背景: 最近5GCPE挺火,各种硬件层出不穷,包括DY上很多商家在推的AX3000叠加展锐RM500 5G模块,自己组装CPE,成本也在300 看了下开源硬件,其实就是一个开源的openwrt系统,硬件上5G模块通过usb协议…...

科学智能赋能空间科学研究(2):AI4S 范式下空间科学实验的核心挑战
中国科学院空间应用工程与技术中心在空间科学实验领域的研究覆盖了多模态空间科学实验数据模式挖掘、领域知识抽取、跨学科知识融合与认知智能等研究内容,有效促进了空间科学实验领域的数据应用生态的体系化建设,相关研究成果已正式发表于权威学术期刊《…...
计算机网络学习(九)——CDN
一、CDN CDN(Content Delivery Network,内容分发网络)是一种通过分布式节点将内容更高效地传递给用户的技术架构,广泛应用于加速网站、视频、下载、直播等业务。 CDN 是把内容放到离用户最近的“高速公路入口”,提升访…...

Axure设计案例——科技感渐变线性图
想让数据变化趋势展示告别枯燥乏味,成为吸引观众目光的亮点吗?快来看看这个Axure设计的科技感渐变线性图案例!科技感设计风格凭借炫酷的渐变色彩打破传统线性图的单调,营造出一种令人过目难忘的视觉体验。每一条线条都仿佛是流动的…...

【Opencv+Yolo】Day2_图像处理
目录 一、图像梯度计算 图像梯度-sobal算子: Scharr:权重变化更大(线条更加丰富,比Sobel更加细致捕捉更多梯度信息) Laplacian算子:对噪音点敏感(可以和其他一起结合使用) 二、边…...
嵌入式开发学习(第二阶段 C语言笔记)
内存操作 我们对于内存操作需要依赖于string.h头文件中相关的函数库。 内存操作函数 内存填充 头文件:#include <string.h> 函数原型: void* memset(void *s,int c,size_t n)函数功能:将内存块s的前n个字节填充为c,一般…...

STUSB4500 PPS(PD3.0)快充SINK模块——应用 解析
0 前言 朋友参加车展,收获一枚很漂亮的倍思65W氮化镓快充头,送给我了。 我看了手中只支持33W快充的三星陷入了沉思… 快充头支持PPS协议,我心思这玩意适合做可调电源啊! 上网随便一查没查到,都是转换成5V、9V、12V等…...
Android全局网络监控最佳实践(Kotlin实现)
本文将介绍如何在Android应用中实现全局网络状态监控,适配高版本API,并提供完整的Kotlin实现方案。 一、核心实现方案 1. 网络监控核心类 SuppressLint("MissingPermission") class NetworkMonitor private constructor(private val contex…...
从认识AI开始-----解密门控循环单元(GRU):对LSTM的再优化
前言 在此之前,我已经详细介绍了RNN和LSTM,RNN虽然在处理序列数据中发挥了重要的作用,但它在实际使用中存在长期依赖问题,处理不了长序列,因为RNN对信息的保存只依赖一个隐藏状态,当序列过长,隐…...

Docker系列(五):ROS容器化三叉戟 --- 从X11、Wayland到DockerFile实战全解析
引言 随着机器人操作系统(ROS)在机器人领域的广泛应用,容器化技术成为提高开发效率和简化部署的关键。在多种容器化方案中,基于X11、Wayland和标准Dockerfile的ROS容器化方式各有特点,它们在容器内安装ROS1和ROS2的实…...

【位运算】常见位运算总结
位运算 常见位运算总结位1的个数比特位计数汉明距离只出现一次的数字只出现一次的数字 III 常见位运算总结 位1的个数 191. 位1的个数 给定一个正整数 n,编写一个函数,获取一个正整数的二进制形式并返回其二进制表达式中 设置位 的个数(也被…...
Delphi 导入excel
Delphi导入Excel的常见方法可分为两种主流方案:基于OLE自动化操作Excel原生接口和利用第三方组件库。以下为具体实现流程及注意事项: 一、OLE自动化方案(推荐基础场景) 该方法通过COM接口调用本地安装的Excel程序,…...

5G RedCap是什么-与标准5G的区别及支持路由器推荐
技术背景与重要性 从智能穿戴到工业传感器,物联网设备种类繁多,但并非所有设备都需要标准5G的全部功能。为满足这些中端应用的需求,3GPP在Release 17中引入了5G RedCap(Reduced Capability),也称为5G NR-L…...

纯html,js创建一个类似excel的表格
后台是php,表中数据可编辑,可删除,可提交到数据库 <!DOCTYPE html> <html> <head><meta charset="utf-8"><style>body {font-family: Arial, sans-serif;margin: 20px;background-color: #fff;}.toolbar {margin-bottom: 10px;disp…...

如何使用windows下的vscode连接到本地虚拟机的linux
1.打开windows下的vscode 下载下图所示插件 下载完以后打开首选项选择设置搜索ssh 搜索ssh往下滑对下图打上勾 点击下图或者按ctrl shift P 搜索ssh 选择第一个,双击后 进入这个界面 好的window基本配置差不多 2.打开虚拟机 在终端中输入 sudo apt-get install…...

Vue开发系列——零基础HTML引入 Vue.js 实现页面之间传参
目录 一、实现页面之间传参 二、使用 URL 查询参数实现传参(不需要额外引入vue-router) 一、实现页面之间传参 实现从a.html 向b.html传参param1value1, param2value2 二、使用 URL 查询参数实现传参(不需要额外引入vue-router) a.html页面 a.html代码: <!…...

Ubuntu22.04 重装后,串口无响应
欢迎关注公号:每日早参,获取每日最新资讯! 1:确认串口设备文件是否存在 在Ubuntu中,串口通常会映射为以下两种 /dev/ttyS*(对于传统的串口) /fragistics/dev/ttyUSB*(对于USB转串口…...

设计模式-发布订阅
文章目录 发布订阅概念发布订阅 vs 监听者例子代码 发布订阅概念 发布/订阅者模式最大的特点就是实现了松耦合,也就是说你可以让发布者发布消息、订阅者接受消息,而不是寻找一种方式把两个分离 的系统连接在一起。当然这种松耦合也是发布/订阅者模式最大…...
C#学习26天:内存优化的几种方法
1.减少对象创建 使用场景: 在循环或密集计算中频繁创建对象时。涉及大量短生命周期对象的场景,比如日志记录或字符串拼接。游戏开发中,需要频繁更新对象状态时。 说明: 重用对象可以降低内存分配和垃圾回收的开销。使用对象池…...
功能测试向量是个什么概念
在半导体测试领域,功能测试向量(Functional Test Vector) 是一个非常重要的概念。以下是对其的详细解释: 1. 什么是功能测试向量? 功能测试向量是一组输入信号和预期输出信号的集合,用于验证芯片的功能是否…...

C++之string的模拟实现
string 手写C字符串类类的基本结构与成员变量一、构造函数与析构函数二、赋值运算符重载三、迭代器支持四、内存管理与扩容机制五、字符串操作函数六、运算符重载总结 手写C字符串类 从零实现一个简易版std::string 类的基本结构与成员变量 namespace zzh { class string { …...

Python打卡第38天
浙大疏锦行 作业: 了解下cifar数据集,尝试获取其中一张图片 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader , Dataset # DataLoader 是 PyTorch 中用于加载数据的工具 from torchvision im…...
【网络安全】轻量敏感路径扫描工具
订阅专栏,获取文末项目源码。 文章目录 工具简介工具特点项目结构使用方法1.环境准备2.配置目标URL3.运行扫描4.结果查看5.自定义扩展项目源码工具简介 该工具是一款基于Python的异步敏感路径扫描工具,用于检测目标网站是否存在敏感文件或路径泄露(如配置文件、密钥、版本控…...
K8S查看pod资源占用和物理机器IP对应关系
方法1:使用管道组合多个grep kubectl describe node | grep -E "Resource|InternalIP" -A 3方法2:显示节点名称和IP地址的对应关系 kubectl describe node | grep -E "Name:|InternalIP:"方法3:更清晰的格式化输出 ku…...