千家信息网

Java如何实现并查集

发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,这篇文章主要介绍"Java如何实现并查集",在日常操作中,相信很多人在Java如何实现并查集问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java如何实现并查集"的疑惑
千家信息网最后更新 2024年11月24日Java如何实现并查集

这篇文章主要介绍"Java如何实现并查集",在日常操作中,相信很多人在Java如何实现并查集问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java如何实现并查集"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

题目

题目背景

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

思路

对于该题而言,考察的是并查集,也就是小怪兽逐个找上级领导的思路,指导找到最终的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 

到此,关于"Java如何实现并查集"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

大王 上级 亲戚 就是 两个 怪兽 学习 思路 题目 不相上下 军队 堂哥 姥爷 更多 沉香 帮助 实用 高兴 接下来 上司 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 如何给服务器换ip 海康威视服务器是什么系统 工业园区直销服务器市面价 网络安全管理和云计算 软件开发公司业务营销 网络安全执法检查重点 天津时代网络技术服务资费 质量软件开发案例 如何在数据库中新建一个查询表 公共区域电子屏网络安全台账 Qt 如何连接达梦数据库 网络安全知识个人隐私安全 天津市科智时代网络技术 软件开发师找工作 武汉大学网络安全考研在职 摩尔庄园怎么进入同一个服务器 win7有数据库工具吗 软件开发师前端招聘郑州 小学生网络安全队会记录 我的世界服务器小游戏互相传送 平度市天气预报软件开发 aspx软件开发都用什么软件 酷通加速服务器邀请码 抖音服务器ip 文儿绘画课堂网络安全手抄报 勤哲服务器管理 江苏专业软件开发价格咨询 收款码软件开发 云环境下直接软件开发 ctf网络安全大赛键盘怎么操作
0