华为OD机试 - 快递业务站 - 并查集(Java 2023 B卷 200分)

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
      • 1、输入:
      • 2、输出:
      • 3、说明:
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

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

专栏导读

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

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

一、题目描述

快递业务范围有 N 个站点,A 站点与 B 站点可以中转快递,则认为 A-B 站可达,如果 A-B 可达,B-C 可达,则 A-C 可达。

现在给 N 个站点编号 0、1、…n-1,用 s[i][j]表示 i-j 是否可达,s[i][j] = 1表示 i-j可达,s[i][j] = 0表示 i-j 不可达。

现用二维数组给定N个站点的可达关系,请计算至少选择从几个主站点出发,才能可达所有站点(覆盖所有站点业务)。

说明:s[i][j]与s[j][i]取值相同。

二、输入描述

第一行输入为 N,N表示站点个数。

之后 N 行表示站点之间的可达关系,第i行第j个数值表示编号为i和j之间是否可达。

1 < N < 10000。

三、输出描述

输出站点个数,表示至少需要多少个主站点。

示例:

1、输入:

4
1 1 1 1
1 1 1 0
1 1 1 0
1 0 0 1

2、输出:

1

3、说明:

选择 0 号站点作为主站点, 0 站点可达其他所有站点,所以至少选择 1 个站点作为主站才能覆盖所有站点业务。

四、解题思路

  1. 第一行输入站点个数N;
  2. 定义二维数组arrs,记录矩阵数据;
  3. 定义arrList,记录每一行的数字;
  4. 之后 N 行表示站点之间的可达关系;
  5. 将每一行的输入放入lineList集合;
  6. 遍历行数据arrList;
  7. 定义visitedSet,记录是否被访问过;
  8. 从 n 出发,访问 n 可达的所有快递点;

五、Java算法源码

package com.guor.od;import java.util.*;public class OdTest {// 是否被访问过private static Set<Integer> visitedSet = new HashSet<>();public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 站点个数int N = Integer.parseInt(sc.nextLine());// 矩阵数据int[][] arrs = new int[N][N];// 每一行的数字集合List<Integer>[] arrList = new List[N];for (int i = 0; i < N; i++) {String[] arr = sc.nextLine().split(" ");List<Integer> lineList = new ArrayList<>();int[] tmp = new int[N];for (int j = 0; j < N; j++) {tmp[j] = Integer.parseInt(arr[j]);if (tmp[j] == 1 && i != j) {lineList.add(j);}}arrs[i] = tmp;arrList[i] = lineList;}int cnt = 0;for (int n = 0; n < arrList.length; n++) {// 如果没有快递点可达,从这里再出发if (!visitedSet.contains(n)) {// 从 n 出发,访问 n 可达的所有快递点dfs(arrList, n);cnt++;}}System.out.println(cnt);}// 从 n 出发,访问 n 可达的所有快递点private static void dfs(List<Integer>[] nums, int n) {// 已经被访问过if (visitedSet.contains(n)) {return;}// 该点已经访问visitedSet.add(n);for (Integer i : nums[n]) {// 访问当前节点可达的邻节点dfs(nums, i);}}
}

六、效果展示

1、输入

4
1 1 1 1
1 1 1 0
1 1 1 0
1 0 0 1

2、输出

1

3、说明

选择 0 号站点作为主站点, 0 站点可达其他所有站点,所以至少选择 1 个站点作为主站才能覆盖所有站点业务。

在这里插入图片描述


🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)

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

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

在这里插入图片描述

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

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

相关文章

若依不分离+Thymeleaf select选中多个回显

项目中遇到的场景&#xff0c;亲测实用 表单添加时&#xff0c;select选中多个&#xff0c;编辑表单时&#xff0c;select多选回显&#xff0c;如图 代码&#xff1a; // 新增代码 <label class"col-sm-3 control-label">通道&#xff1a;</label><…

阿里云服务器方升架构、自研硬件、AliFlash技术创新

阿里云服务器技术创新&#xff1a;服务器方升架构及自研硬件、自研存储硬件AliFlash和阿里云异构计算加速平台&#xff0c;阿里云百科分享阿里云服务器有哪些技术创新&#xff1a; 目录 服务器技术创新 服务器方升架构及自研硬件 自研存储硬件AliFlash 阿里云异构计算加速…

基于FFmpeg+SDL的视频播放器的制作

基于FFmpegSDL的视频播放器的制作 基于FFmpegSDL的视频播放器的制作实验1实验2实验3实验4基本练习进阶练习 实验5实验6 基于FFmpegSDL的视频播放器的制作 雷霄骅博士的课程。 课程链接&#xff1a;https://blog.csdn.net/leixiaohua1020/article/details/47068015 初学 FFmp…

Go语言开发小技巧易错点100例(九)

往期回顾&#xff1a; Go语言开发小技巧&易错点100例&#xff08;一&#xff09;Go语言开发小技巧&易错点100例&#xff08;二&#xff09;Go语言开发小技巧&易错点100例&#xff08;三&#xff09;Go语言开发小技巧&易错点100例&#xff08;四&#xff09;Go…

深入理解二叉树:结构、遍历和实现

文章目录 &#x1f34b;引言&#x1f34b;什么是二叉树&#xff1f;&#x1f34b;二叉树的基本性质&#x1f34b;二叉树的遍历&#x1f34b;二叉树的实现&#x1f34b;结语 &#x1f34b;引言 在计算机科学中&#xff0c;二叉树是一种重要的数据结构&#xff0c;广泛应用于各种…

java面试题-常见技术场景

常见技术场景 1.单点登录这块怎么实现的 1.1 概述 单点登录的英文名叫做&#xff1a;Single Sign On&#xff08;简称SSO&#xff09;,只需要登录一次&#xff0c;就可以访问所有信任的应用系统 在以前的时候&#xff0c;一般我们就单系统&#xff0c;所有的功能都在同一个…

[plugin:vite:css] [sass] Undefined mixin.

前言&#xff1a; vite vue3 TypeScript环境 scss报错&#xff1a; [plugin:vite:css] [sass] Undefined mixin. 解决方案&#xff1a; 在vite.config.ts文件添加配置 css: {preprocessorOptions: {// 导入scss预编译程序scss: {additionalData: use "/resources/_ha…

纯css html 真实水滴效果

惯例,不多说直接上图 秉承着开源精神,我们将这段代码无私地分享给大家&#xff0c;因为我们深信&#xff0c;信息的共享和互相学习是推动科技进步的关键。我们鼓励大家在使用这段代码的同时&#xff0c;也能够将其中的原理、思想和经验分享给更多的人。 这份代码是我们团队用心…

11.1Spring基础(核心概念,创建和使用,简单读取)

一.Spring概念: 1.Spring就是包含了众多工具方法的IoC容器. 2.IoC容器:控制反转,指的是对象的生命周期,将对象的生命周期(什么时候创建,销毁)交给Spring进行管理. 在传统开发中,如果A类依赖B类,会在A类中创建B类的实例,如果B类增加一个属性,那么使用B类的构造方法需要修改代码…

基于微信小程序的电动车智能充电系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言运行环境说明用户的主要功能有&#xff1a;管理员的主要功能有&#xff1a;具体实现截图详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考论文参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌…

jvm内存分配与回收策略

自动内存管理 解决两个问题 自动给对象分配内存 对象一般堆上分配&#xff08;而实际上也有可能经过即时编译后被拆散为标量类型并间接地在栈上分配&#xff09; 新生对象通常会分配在新生代&#xff0c;少数情况下&#xff08;例如对象大小超过一定阈值&#xff09;也可能…

C/C++跨平台构建工具CMake入门

文章目录 1.概述2.环境准备2.1 安装编译工具2.2 安装CMake 3.编译一个示例程序总结 1.概述 本人一直对OpenGL的3d渲染很感兴趣&#xff0c;但是苦于自己一直是Android开发&#xff0c;没有机会接触这方面的知识。就在最近吗&#xff0c;机会来了&#xff0c;以前一个做3D渲染的…