广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java实现并查集示例详解
  • 951
分享到

Java实现并查集示例详解

2024-04-02 19:04:59 951人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录题目思路find实现join的实现整体代码 题目 题目背景 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关

题目

题目背景

若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。

思路

对于该题而言,考察的是并查集,也就是小怪兽逐个找上级领导的思路,指导找到最终的Boss停止下来,如果两个怪兽要打架,需要问一问他们的上级领导,领导再问领导,逐级向上,最终发现它们属于同一个Boss的部署的话就不能再打架了,这道题同样的思路,如果斗罗大陆的一开始白沉香不知道唐三是亲戚的话,他们就会先询问自己的祖辈,而白沉香通过她爷爷得知她和唐三有亲戚,那么他们就不会再打起来,而是会联盟,一起去打别的敌人,同样,我的亲戚是你,你的亲戚是她,那么我和她也就会是亲戚,就像老家里你堂哥是你亲戚,你堂哥和他姥爷是亲戚,那么你就和他姥爷是亲戚

find实现

这个find就是用来查找他们的上级的,初始化时小怪兽高兴坏了,认为自己就是自己的上司,我就是王,我就是Boss,这么想其实也并没有错,毕竟自己在井底,那么,就用数组pre[]来存他们的上一级,例如:pre[10]=6;那么就认为10的上级就是6,6的上级假设是4,4的上级加入是自己,也即是 pre[4]=4;这时为4的怪兽就理解了,原来自己的上级是自己,那自己就是王了,这时就找到了boss,回想刚刚说的,两个怪兽如果想要打架,就需要先问问各自的上级,如果上级再问上级直到问到他们属于同一个boss,这时它们就会微笑说,原来我们属于同一个领导,那么find就是用来找最终两个分队的怪兽最终的领导的


 public static int find(int x){
        if(pre[x]==x)return x;//如果上级领导是自己,就返回自己
        return pre[x]=find(pre[x]);//如果不是,就逐一进行访问上级,直到找到boss,这里相当于最终找到了boss,把boss赋值给pre[x]
    }

join的实现

join是用来干嘛的呢?它是用来合并的,加入有两个大王,它们各自占山为王,势力不相上下,实力也不相上下,有一天发生变故,大王1就想和大王2进行合并,大王二琢磨着合并后谁当大王?不能让它当了大王,大王2于是就说合并后我来当大王,大王一显然会不同意,大王二说你来找我合并的,不同意也要同意,于是大王二当成了 大王,这时大王二掌握了所有的军队,包括大王一的,那么join就是用来选两个大王其中一个作为总大王的。


 public static void join(int x,int y){
        int xx=find(x);//用find找到第一个大王
        int yy=find(y);//找到第二个大王
        if(xx!=yy){//如果不相等
            pre[xx]=yy;//将其中一个大王统领第一个大王所有的军队
        }

整体代码 


import java.util.Scanner;
public class test1 {
    static  int []pre=new int[10000];//注意题目中范围
    public static void main(String[] args) {
        int n,m,p,x,y;
        Scanner sc=new Scanner(System.in);
        n=sc.nextInt();//n个人
        m=sc.nextInt();//m对关系
        p=sc.nextInt();//p询问关系
        for(int i = 0; i < n; i++){
            pre[i]=i;//初始化,自己的祖先是自己
        }
        for(int i = 0; i < m; i++){
            x=sc.nextInt();
            y= sc.nextInt();
            join(x,y);//合并
        }

        for(int i = 0; i <p;i++){
            x=sc.nextInt();
            y= sc.nextInt();
            if(find(x)==find(y)){
                System.out.print("Yes");
            }else{
                System.out.print("No");
            }
        }
    }
    public static int find(int x){
        if(pre[x]==x)return x;
        return pre[x]=find(pre[x]);
    }
    public static void join(int x,int y){
        int xx=find(x);
        int yy=find(y);
        if(xx!=yy){
            pre[xx]=yy;
        }
    }
} 

到此这篇关于Java实现并查集示例详解的文章就介绍到这了,更多相关Java 并查集内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java实现并查集示例详解

本文链接: https://www.lsjlt.com/news/159661.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java实现并查集示例详解
    目录题目思路find实现join的实现整体代码 题目 题目背景 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关...
    99+
    2022-11-12
  • 详解Java实现数据结构之并查集
    目录​一、什么是并查集二、并查集解析2.1、初始化2.2、并 union(int a,int b)2.3、查 search(int a)三、优化四、代码实现五、...
    99+
    2022-11-12
  • java中并查集的示例分析
    这篇文章主要介绍了java中并查集的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、概述并查集:一种树型数据结构,用于解决一些不相交集合的合并及查询问题。例如:有n...
    99+
    2023-06-29
  • java数据结构并查集详解
    目录一、概述二、实现2.1 Quick Find实现2.2 Quick Union实现三、优化3.1基于size的优化3.2基于rank优化3.2.1路径压缩(Path C...
    99+
    2022-11-13
  • Java如何实现并查集
    这篇文章主要介绍“Java如何实现并查集”,在日常操作中,相信很多人在Java如何实现并查集问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java如何实现并查集”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-25
  • Java实现FutureTask的示例详解
    目录前言FutureTask自己实现FutureTask工具准备FutureTask设计与实现总结前言 在并发编程当中我们最常见的需求就是启动一个线程执行一个函数去完成我们的需求,而...
    99+
    2022-11-13
    Java 实现FutureTask Java FutureTask
  • java编程实现并查集的路径压缩代码详解
    首先看两张路径压缩的图片:并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的 Kruskal 算法和求最近公共祖先(Least...
    99+
    2023-05-30
    java 算法 并查集
  • java实现Yaml转Json示例详解
    目录缘起调研过程1.0 入口点1.1 基本用法1.2 自定义类型解析1.3 实战1.3.1 从本地读配置文件1.3.2 从配置中心读配置文件缘起 年前,因为项目需要进行配置的优化和...
    99+
    2023-02-13
    java实现Yaml转Json Yaml转Json
  • C语言并查集的非递归实现详解
    目录【算法分析】【算法代码】并查集压缩路径非递归写法参考文章总结【算法分析】 经典的递归实现的并查集,在数据规模过大时,可能会爆栈,因此有了并查集的非递归实现。核心代码如下: i...
    99+
    2022-11-12
  • Java实现跳跃表的示例详解
    跳表全称叫做跳跃表,简称跳表,是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序列表上面增加多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同...
    99+
    2022-11-13
  • Java实现无向图的示例详解
    目录基本概念图的定义无向图的定义无向图的 API无向图的实现方式邻接矩阵边的数组邻接表数组无向图的遍历深度优先搜索广度优先搜索后记基本概念 图的定义 一个图是由点集V={vi}&nb...
    99+
    2022-11-13
  • Redis实现数据的交集、并集、补集的示例
    目录场景说明环境说明交并补计算差集的计算交集的计算并集的计算Redis命令说明场景说明 今天我们来模拟一个这样的场景,我们在本地有多个文本文件,每个文件里面存了很多的32位的字符串作为用户的唯一标识,每个用户存做一行,假...
    99+
    2022-08-10
    Redis数据交集 Redis数据并集 Redis数据补集
  • springboot集成spark并使用spark-sql的示例详解
    首先添加相关依赖: <xml version="1.0" encoding="UTF-8"> <project xmlns="http://maven.apache...
    99+
    2022-11-13
  • 详述 DB2 分页查询及 Java 实现的示例
    博主说:有时候,我们需要对数据库中现有的数据进行大量处理操作(例如表中的某个字段需要全部更新等),如果直接使用select * from tableName很容易出现问题,因此我们可以选择分页查询,批量处理数据。DB2 star...
    99+
    2023-05-31
    db2 分页 查询
  • SpringBoot框架集成ElasticSearch实现过程示例详解
    目录依赖与SpringBoot集成配置类实体类测试例子RestHighLevelClient直接操作索引操作文档操作检索操作依赖 SpringBoot版本:2.4.2 <...
    99+
    2022-11-12
  • Java利用SPI实现解耦的示例详解
    目录概述实现案例优势和不足概述 SPI的全称是服务提供接口,可以用其来启动框架的扩展和替换组件。 其本质是利用 接口实现+策略模式+配置文件来实现对实现类的动态加载。 在具体的使用中...
    99+
    2023-05-14
    Java SPI实现解耦 Java SPI解耦 Java 解耦
  • Java数据机构中关于并查集的详解
    目录概念实现初始化并查集判断是不是同一个组查找当前节点的代表节点合并操作 本期文章源码:GitHub 一文彻底搞懂《并查集》! 概念 并查集是一种树型的数据结构,用于处理一些不相交集...
    99+
    2022-11-12
  • Java实现差分数组的示例详解
    目录前言应用场景Leetcode题目实战题目描述思路代码前言 昨天(2022-06-07)在做leetcode每日一题的时候,第一次看到了这个超级简单但是很实用的算法---差分数组,...
    99+
    2022-11-13
  • Java实现图片合成的示例详解
    目录场景环境搭建引入pom文件定义核心接口ImageService定义核心接口实现类ImageServiceImpl测试ImageController测试效果总结场景 前端有一个神器...
    99+
    2022-11-13
  • Java实现调用ElasticSearch API的示例详解
    目录java操作es有两种方式Elasticsearch-Rest-Client(官方,推荐)maven配置文件es配置类导包Spring Data ElasticSearch配置文...
    99+
    2023-03-02
    Java调用ElasticSearch API Java ElasticSearch API Java ElasticSearch
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作