华为OD机试 - 疫情扩散时间计算 - 矩阵(Java 2024 C卷 200分)

目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、Java算法源码
- 六、效果展示
- 1、输入
- 2、输出
- 3、说明
华为OD机试 2024C卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
在一个地图中(地图有N*N个区域组成),有部分区域被感染病菌。
感染区每天都会把周围(上下左右)的4个区域感染。
请根据给定的地图计算,多少天后,全部区域都会被感染。 如果初始地图上所有区域全部都被感染,或者没有被感染,返回-1
二、输入描述
一行N*N个数字(只包含0,1,不会有其他数字)表示一个地图,数字间用“,”分割,0表示未感染区域,1表示已经感染区域
每N个数字表示地图中一行,输入数据共表示N行N列的区域地图。 例如输入1,0,1,0,0,0,1,0,1,表示地图
1, 0, 1
0, 0, 0
1, 0, 1
三、输出描述
一个整数,表示经过多少天后,全部区域都被感染1 <=N <= 200
四、解题思路
- 将输入字符串转换为一维数组;
- 将一维数组转换为二维矩阵;
- 定义感染区域队列arrQueue;
- 将一维数组转换为二维矩阵;
- 将感染区域加入队列;
- 判断特殊情况;
- 记录未感染区域数量;
- 记录四个方向的偏移量;
- 记录感染天数;
- 当队列不为空且还有未感染区域时,进行循环;
- 取出队首元素;
- 获取队首元素的坐标;
- 记录感染天数;
- 遍历四个方向;
- 定义新的横坐标;
- 定义新的纵坐标;
- 判断边界;
- 如果该区域未感染;
- 未感染区域数量减一;
- 标记该区域已感染;
- 将该区域加入队列;
- 返回感染天数;
- 返回感染天数;
五、Java算法源码
package com.guor.od;import java.util.*;public class OdTest {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String input = sc.nextLine();List<Integer> map = new ArrayList<>();int pos = 0;String token = "";// 将输入字符串转换为一维数组while ((pos = input.indexOf(",")) != -1) {token = input.substring(0, pos);map.add(Integer.parseInt(token));input = input.substring(pos + 1);}map.add(Integer.parseInt(input));// 输出感染天数System.out.println(getResult(map));}public static int getResult(List<Integer> map) {int n = (int) Math.sqrt(map.size());// 将一维数组转换为二维矩阵int[][] matrix = new int[n][n];// 用队列存储感染区域Queue<int[]> arrQueue = new LinkedList<>();for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {// 将一维数组转换为二维矩阵matrix[i][j] = map.get(i * n + j);// 将感染区域加入队列if (matrix[i][j] == 1) {arrQueue.offer(new int[]{i, j});}}}// 判断特殊情况if (arrQueue.isEmpty() || arrQueue.size() == map.size()) {return -1;}// 记录未感染区域数量int healthyNum = map.size() - arrQueue.size();// 记录四个方向的偏移量int[][] offSets = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};// 记录感染天数int day = 0;// 当队列不为空且还有未感染区域时,进行循环while (!arrQueue.isEmpty() && healthyNum > 0) {// 取出队首元素int[] arr = arrQueue.poll();// 获取队首元素的坐标int x = arr[0];int y = arr[1];// 记录感染天数day = matrix[x][y] + 1;// 遍历四个方向for (int[] offset : offSets) {// 新的横坐标int x_new = x + offset[0];// 新的纵坐标int y_new = y + offset[1];// 判断边界if (x_new < 0 || x_new >= n || y_new < 0 || y_new >= n) {continue;}// 如果该区域未感染if (matrix[x_new][y_new] == 0) {// 未感染区域数量减一healthyNum--;// 标记该区域已感染matrix[x_new][y_new] = day;// 将该区域加入队列arrQueue.offer(new int[]{x_new, y_new});}}}return day - 1; // 返回感染天数}
}
六、效果展示
1、输入
1,0,1,0,0,0,1,0,1
2、输出
2
3、说明
一天以后,地图中仅剩余中心点未被感染,2天后,全部被感染。

🏆下一篇:华为OD机试 - 最长的顺子 - 感谢@禁止你发言提供的更简便算法(Java 2023 B卷 200分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷+C卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

相关文章:
华为OD机试 - 疫情扩散时间计算 - 矩阵(Java 2024 C卷 200分)
目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷C卷&am…...
[数据集][图像分类]棉花叶子病害分类数据集2293张4类别
数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):2293 分类类别数:4 类别名称:["diseased_cotton_leaf"…...
《辐射4》是一款什么样的游戏 怎样在mac电脑上玩到《辐射4》辐射4攻略 辐射4开局加点 怎么在Mac电脑玩Steam游戏
辐射4(Fallout 4)是由Bethesda开发的一款动作角色扮演类游戏,为《辐射》系列游戏作品的第四代,于2015年11月10日发行。游戏叙述了主角一家在核爆当天(2077年10月23日),被Vault-Tec(避…...
视频推拉流EasyDSS平台直播通道重连无法转推的原因排查与解决
视频推拉流EasyDSS视频直播点播平台,集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体,可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务。 用户使用EasyDSS平台对直播通道进行转推,发现只要关闭…...
Javaweb之SpringBootWeb案例之自动配置案例的自定义starter测试的详细解析
3.2.4.3 自定义starter测试 阿里云OSS的starter我们刚才已经定义好了,接下来我们就来做一个测试。 今天的课程资料当中,提供了一个自定义starter的测试工程。我们直接打开文件夹,里面有一个测试工程。测试工程就是springboot-autoconfigurat…...
java包的相关概念
包:有效地管理类的一个机制。 包名的目的:通过隶属不同的包有效的区分不同源文件中名字相同的类 包语句 声明:通过关键字 package声明包语句。 位置:源文件中的第一条语句。 作用:为该源文件中声明的类指定包名。 …...
window搭建本地mongo数据库并导入数据
1 window下载mongo数据库 官网:www.mongodb.com 选择 Products > Community Edition 就能进入社区版 在这里下载 windows 版对应的安装包 注意:6.0.1 版本的 MongoDB 配置环境变量有问题,并且我不知道怎么解决,如果想要避免出…...
如何为Android车载应用开发通知?
如何为Android车载应用开发通知?在开发车载应用的通知时,开发者需要考虑到驾驶安全,确保通知不会分散驾驶员的注意力。这通常意味着通知应该是非侵入性的,或者在不影响驾驶的情况下提供信息。开发者可以使用Android的通知API来创建…...
centos上部署k8s
环境准备 四台Linux服务器 主机名 IP 角色 k8s-master-94 192.168.0.94 master k8s-node1-95 192.168.0.95 node1 k8s-node2-96 192.168.0.96 node2 habor 192.168.0.77 镜像仓库 三台机器均执行以下命令: 查看centos版本 [rootlocalhost Work]# cat /…...
网络安全: Kali Linux 进行 MSFvenom 程序利用
目录 一、实验 1.环境 2. Kali Linux 进行 MSFvenom 程序利用 3. 创建计划任务自动运行 MSFvenom 程序 二、问题 1.在线加密解密 2.MSF 运行失败 3.MobaXterm 连接Ubuntu 失败 一、实验 1.环境 (1)主机 表1 主机 系统版本IP备注Kali Linux20…...
浅显易懂C语言指针!!!(三)
文章目录 Pointers as function arguments - call by reference//函数传值vs传引用 Pointers as function arguments - call by reference//函数传值vs传引用 #include<stdio.h> void Increment(int a){//increment 增加 a a 1;//;函数中的是形式参数 形参…...
01 LM 算法及 Cpp 实现
文章目录 01 LM 算法及 Cpp 实现1.1 应用1.2 阻尼法推导1.3 Cpp 算法实现 01 LM 算法及 Cpp 实现 1.1 应用 LM 算法用于解决非线性最小二乘问题 min x F ( x ) 1 2 ∥ f ( x ) ∥ 2 2 (1) \min _x F(x)\frac{1}{2}\|f(\boldsymbol{x})\|_2^2 \tag{1} xminF(x)21∥f(x…...
【网络安全架构】互联网正对中国社会、经济、文化等各个领域产生巨大影响‘
摘 要: 中国互联网近年来飞速发展,普及率达到38.4%。已稳居世界第一网民大国的地位。互联网正对社会、经济、文化等各个领域产生巨大影响。2011年12月21日“泄密门”事件,再次敲响网络安全的警钟。网络攻击和入侵都是根据网络模型不同层次的特…...
【笔记】Android ServiceStateTracker 网络状态变化逻辑及SPN更新影响
业务简介 在网络状态变化的时候(数据或WiFi),会更新SPN。 基于Android U的代码分析。 分类:SPN Data_Dic-的博客-CSDN博客 功能逻辑 状态说明 飞行模式下注册上WFC的话,注册状态MD上报 regState: NOT_REG_MT_NOT…...
2PC和3PC的区别是什么
2PC提交协议是什么 二阶段提交是指,在计算机网络一级数据库领域内,为了使基于分布式系统的架构下的所有节点在进行事务提交时保持一致性而设计的一种算法。在分布式系统中,每个节点虽然可以知晓自己操作的成功和失败,但是无法知道…...
redis未设置密码被植入挖矿脚本
最近一台测试linux响应速度贼慢,检查发现cpu消耗高达100%!查看进程杀死后过段时间又重启了,一时间也摸不到头绪。无意间发现启动redis的时候cpu瞬间拉到了100%,主要就是zzh和newinit.sh两个脚本。百度了一下说是被植入了挖矿脚本&…...
轮询--一起学习吧之架构
一、定义 轮询(Polling)是一种CPU决策如何提供周边设备服务的方式,又称“程控输出入”(Programmed I/O)。这种方式是由CPU定时发出询问,依序询问每一个周边设备是否需要其服务,有即给予服务&am…...
【开发工具】Git模拟多人开发场景理解分支管理和远程仓库操作
我们来模拟一个多人多分支的开发场景。假设你有一个新的空白远程仓库,假设地址是 https://github.com/user/repo.git。 克隆远程仓库到本地 $ git clone https://github.com/user/repo.git这会在本地创建一个 repo 目录,并自动设置远程主机为 origin。 创建本地开发分支并推送…...
从零学习Linux操作系统 第三十一部分 ansible常用模块介绍
一、ansible运行模块的两种方式 Ad-Hoc方式 ##利用ansible命令直接完成管理,主要用于临时命令使用场景 playbook方式 ##ansible脚本,主要用于大型项目场景,需要前期的规划,相当于shell当中的脚本 二、如何查看模块帮助 ansible…...
【Linux C | 网络编程】多播的概念、多播地址、UDP实现广播的C语言例子
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...
Linux内核动态调试技术:pr_debug与dynamic_debug实战指南
1. 动态输出:内核调试的“可控探针”在Linux内核开发与调试的日常里,最让人头疼的莫过于“日志”问题。printk虽然直接,但一旦开启,信息洪流会瞬间淹没控制台,不仅影响性能,更让你在关键信息里大海捞针。更…...
Godot-MCP终极指南:如何用AI助手5倍提升Godot游戏开发效率
Godot-MCP终极指南:如何用AI助手5倍提升Godot游戏开发效率 【免费下载链接】Godot-MCP An MCP for Godot that lets you create and edit games in the Godot game engine with tools like Claude 项目地址: https://gitcode.com/gh_mirrors/god/Godot-MCP 在…...
如何免费下载中国大学MOOC视频:MoocDownloader完整使用指南
如何免费下载中国大学MOOC视频:MoocDownloader完整使用指南 【免费下载链接】MoocDownloader An MOOC downloader implemented by .NET. 一枚由 .NET 实现的 MOOC 下载器. 项目地址: https://gitcode.com/gh_mirrors/mo/MoocDownloader 你是否曾经因为网络不…...
2026 OpenTiny NEXT 产品调研启动!
各位开发者朋友们! OpenTiny NEXT 系列产品(NEXT SDK / TinyRobot / GenUI SDK / AI Extension / WebAgent 等)已陪伴大家走过一段时间。为了更精准地解决实际开发中的痛点,我们正式启动 2026 年度用户体验调研。 ⏰ 调研时间&…...
终极指南:如何用Python实现手机号反查QQ号的3种高效方法
终极指南:如何用Python实现手机号反查QQ号的3种高效方法 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 在数字身份管理日益复杂的今天,你是否遇到过忘记某个手机号绑定了哪个QQ账号的困扰?或者需…...
保姆级教程:在Ubuntu上配置Lotus基准测试环境(含参数下载与自定义GPU支持)
在Ubuntu上配置Lotus基准测试环境的完整指南 对于Filecoin生态系统的参与者来说,理解网络性能并优化硬件配置至关重要。本文将带您完成在Ubuntu系统上搭建Lotus基准测试环境的全过程,从基础环境准备到高级GPU自定义支持,为您提供一份详尽的实…...
英雄联盟个人信息修改终极指南:3分钟学会LeaguePrank完整使用教程
英雄联盟个人信息修改终极指南:3分钟学会LeaguePrank完整使用教程 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 你是否厌倦了英雄联盟中千篇一律的个人资料显示?想向好友展示一个与众不同的游戏身份吗…...
【免费下载】 QQ空间说说批量删除插件:2023年最新版推荐
QQ空间说说批量删除插件:2023年最新版推荐 【下载地址】QQ空间说说批量删除插件-2023年最新版 本仓库提供了一个2023年最新版的QQ空间说说批量删除插件。该插件可以帮助用户快速批量删除QQ空间中的说说,节省大量手动操作的时间 项目地址: https://gitc…...
英雄联盟录像编辑完整教程:5分钟掌握League Director专业工具
英雄联盟录像编辑完整教程:5分钟掌握League Director专业工具 【免费下载链接】leaguedirector League Director is a tool for staging and recording videos from League of Legends replays 项目地址: https://gitcode.com/gh_mirrors/le/leaguedirector …...
冥想第一千八百八十二天(1882)
1.周六,醒的很早,然后去锦和公园转了一圈,一直在等待大雨,结果到了傍晚才下,浪费了一天,不过天气很不好,就不适合外出了。敬畏大自然。 2.感谢父母,感谢朋友,感谢家人&am…...
