华为OD机试真题 Java 实现【寻找最大价值的矿堆】【2023 B卷 100分】,附详细解题思路

news/2025/1/14 22:12:33/

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、Java算法源码
    • 五、效果展示
      • 1、输入
      • 2、输出

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

给你一个由’0’(空地)、‘1’(银矿)、‘2’(金矿)组成的地图,矿堆只能由上下左右相邻的金矿或银矿连接形成。超出地图范围可以认为是空地。
假设银矿价值1,金矿价值2,请你找出地图中最大价值的矿堆并输出该矿堆的价值。

二、输入描述

地图元素信息如下:

22220
00000
00000
11111

  • 地图范围最大 300*300
  • 0 <=地图元素 <= 2

三、输出描述

矿堆的最大价值

四、Java算法源码

package com.guor.od;import java.util.*;public class OdTest {// 地图矩阵static int[][] map;// 上下左右,四个方向的偏移量static int[][] offsets = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};public static void main(String[] args) {Scanner sc = new Scanner(System.in);int N = Integer.valueOf(sc.nextLine());// 读入地图信息ArrayList<String> lines = new ArrayList<>();for (int i = 0; i < N; i++) {lines.add(sc.nextLine());}// 构建地图矩阵int rows = lines.size();int cols = lines.get(0).length();map = new int[rows][cols];for (int i = 0; i < rows; i++) {String line = lines.get(i);for (int j = 0; j < cols; j++) {map[i][j] = line.charAt(j) - '0';}}// 记录最大矿堆价值int maxVal = 0;// 遍历地图矩阵for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {// 如果点(i,j)没有被访问过,且点(i,j)上有矿,则进入深搜if (map[i][j] > 0) {LinkedList<int[]> stack = new LinkedList<>();stack.add(new int[]{i, j});int sum = 0;while (!stack.isEmpty()) {int[] pos = stack.removeLast();int x = pos[0], y = pos[1];sum += map[x][y];map[x][y] = 0;// 遍历四个方向for (int[] offset : offsets) {int newX = x + offset[0];int newY = y + offset[1];// 如果新位置在地图范围内,且有矿,则加入栈中if (newX >= 0 && newX < rows && newY >= 0 && newY < cols && map[newX][newY] > 0) {stack.add(new int[]{newX, newY});}}}// 更新最大矿堆价值maxVal = Math.max(maxVal, sum);}}}System.out.println(maxVal);}
}

五、效果展示

1、输入

4
22220
00000
00000
01111

2、输出

8

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述


http://www.ppmy.cn/news/1001836.html

相关文章

Dockerfile构建LNMP镜像(yum方式)

目录 Dockerfile构建LNMP镜像 1、建立工作目录 2、编写Dockerfile文件 3、构建镜像 4、测试容器 5、浏览器访问测试&#xff1a; Dockerfile构建LNMP镜像 1、建立工作目录 [roothuyang1 ~]# mkdir lnmp/ [roothuyang1 ~]# cd lnmp/ 2、编写Dockerfile文件 [roothuyang1 …

【计算机网络】NAT及Bridge介绍

OSI七层模型 七层模型介绍及举例 为通过网络将人类可读信息通过网络从一台设备传输到另一台设备&#xff0c;必须在发送设备沿 OSI 模型的七层结构向下传输数据&#xff0c;然后在接收端沿七层结构向上传输数据。 数据在 OSI 模型中如何流动 库珀先生想给帕尔梅女士发一封电…

STSP中用于记录节点和旅行回路的四种数据结构

STSP中用于记录节点和旅行回路的四种数据结构 双链表结构2-level tree卫星结构k-level卫星结构树参考文献 对于TSP是是历史悠久的研究问题&#xff0c;直至现在已经有了很多成熟高效的算法来求解问题。在拥有好的求解算法的同时&#xff0c;优秀的数据结构可以同时大幅提升问题…

zabbix简易入门:基本的网络监控、WEB监控

我们越来越发现&#xff1a;网络越来越复杂&#xff0c;网络、应用、云端……故障点随时可能发生&#xff0c;而我们不能人工盯着所有的问题&#xff0c;所以&#xff0c;网管软件是必须的。那么没有预算的情况下&#xff0c;我们只好自己布署简单的网管软件了。 zabbix网站上可…

Requests模块怎么设置字符编码

Requests模块在发出网络请求时,支持设置字符编码,主要有以下两种方式: 在请求头中设置字符编码 可以通过headers参数设置字符编码,例如: import requestsurl http://www.example.comheaders {user-agent: my-app/0.0.1,Accept-Encoding: utf-8}resp requests.get(url, he…

什么是Java中的JVMTI(JVM Tool Interface)?

Java中的JNI&#xff08;Java Native Interface&#xff09;和JVMTI&#xff08;JVM Tool Interface&#xff09;都是与Java运行时环境&#xff08;JVM&#xff09;交互的工具&#xff0c;但它们有不同的目的和使用场景。下面我从新手的角度来幽默地解释一下它们的区别和用途。…

前端Vue入门-day08-vant组件库

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 vant 组件库 安装 导入 全部导入 按需导入 浏览器配饰 Viewport 布局 Rem 布局适配 vant 组件库 …

WPF中自定义Loading图

纯前端方式&#xff0c;通过动画实现Loading样式&#xff0c;如图所示 <Grid Width"35" Height"35" HorizontalAlignment"Center" VerticalAlignment"Center" Name"Loading"><Grid.Resources><DrawingBrus…