并查集判断是否有环存在

题目描述

在这里插入图片描述

思路分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码实现

package com.atguigu.disjointSet;public class djset {public static int VERTICES=6;public static void initialise(int parent[]){int i;for (i = 0; i < VERTICES; i++) {parent[i]=-1;}}public static int find_root(int x,int parent[]){int x_root=x;while (parent[x_root]!=-1){x_root=parent[x_root];}//出了循环说明已经找到父节点return x_root;}/*返回1表示union成功 合并成功,0表示合并失败*/public static int union_vertices(int x,int y,int parent[]){int x_root=find_root(x,parent);int y_root=find_root(y,parent);if(x_root==y_root){//x,y的父节点相同return 0;}else {parent[x_root]=y_root;return 1;}}public static void main(String[] args) {int parent[]=new int[VERTICES];int edges[][]={{0,1},{1,2},{1,3},{2,4},{3,4},{2,5}};initialise(parent);int i;for ( i = 0; i < edges.length; i++) {int x=edges[i][0];int y=edges[i][1];if(union_vertices(x,y,parent)==0){System.out.println("存在环");return;}}System.out.println("不存在环");}
}

压缩路径

package com.atguigu.disjointSet;public class djset {public static int VERTICES=6;public static void initialise(int parent[]){int i;for (i = 0; i < VERTICES; i++) {parent[i]=-1;}}public static int find_root(int x,int parent[]){int x_root=x;while (parent[x_root]!=-1){x_root=parent[x_root];}//出了循环说明已经找到父节点return x_root;}/*返回1表示union成功 合并成功,0表示合并失败*/public static int union_vertices(int x,int y,int parent[],int rank[]){int x_root=find_root(x,parent);int y_root=find_root(y,parent);if(x_root==y_root){//x,y的父节点相同return 0;}else {if(rank[x_root]>rank[y_root]){parent[y_root]=x_root;}else if(rank[y_root]>rank[x_root]){parent[x_root]=y_root;}else {parent[x_root]=y_root;rank[y_root]++;}}}public static void main(String[] args) {int parent[]=new int[VERTICES];int rank[]=new int[VERTICES];int edges[][]={{0,1},{1,2},{1,3},{2,4},{3,4},{2,5}};initialise(parent);int i;for ( i = 0; i < edges.length; i++) {int x=edges[i][0];int y=edges[i][1];if(union_vertices(x,y,parent,rank)==0){System.out.println("存在环");return;}}System.out.println("不存在环");}
}

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

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

相关文章

Visual Studio 2017更新,侧重于提高稳定性

Microsoft已对其旗舰开发软件产品Visual Studio 2017&#xff08;VS2017&#xff09;的安装程序和设置引擎做了全新设计&#xff0c;意在能快速地部署更新到VS2017。VS2017的第一个命名版本更新在VS2017首发的一个月后就可用&#xff0c;这充分体现了这一全新设计的优势所在。 …

阅读器关闭时尝试调用Read无效时的解决方法

今天在写asp .netmvc的项目时&#xff0c;发现了个困扰我很久的问题&#xff0c;经过仔细研究终于解决了。 问题如下&#xff1a; 首先来看一下原来有问题的代码&#xff1a; public static SqlDataReader Excutereader(string sql,params SqlParameter [] param) {using (SqlC…

.NET或将引入类型类和扩展

类型类是另外一项正被考虑引入.NET未来版本的特性。在提案“外观和扩展&#xff08;Shapes and Extensions&#xff09;”中&#xff0c;该特性被称为外观&#xff0c;它们将大幅提升.NET泛型的能力。Mads Torgersen这样描述类型类&#xff1a; 接口抽象的是作为类型实例的对象…

成为更优秀的程序员:退后一步看问题

转载自 成为更优秀的程序员&#xff1a;退后一步看问题 一天&#xff0c;在工作中… Bug #3890 来自客户&#xff1a; 有个程序出现了错误&#xff0c;程序提示说“SpeedCalculator::compute()里出现了除零情况”。 请尽快修复&#xff01; 你打开SpeedCalculator.php&#…

深夜福利, 小试linuxkit

前言 今天小编的朋友圈被DockerCon和linuxkit刷屏了&#xff0c;再不出来写点linuxkit的东东恐怕就要跟不上时代了。小编翻阅了N多的有关linuxkit的文章&#xff0c;发现绝大多数都是英文的讲解&#xff0c;小编本着对读者负责的态度决定先将linuxkit的文章翻译成中文&#xff…

.NET Core 2.0及.NET Standard 2.0

.NET Core 2.0的发布时间&#xff0c;.NET Core 2.0预览版及.NET Standard 2.0 Preview大概在5月中旬或下旬发布。 .NET Core 2.0正式版本发布时间大约在Q3 2017发布&#xff0c;具体我估计大概在8月份左右。同时一起发布的也就是.NET Standard 2.0。 MilestoneRelease Date.…

Linux清理磁盘挂载点方法(亲测有效)

问题现象 Linux操作系统云服务器根目录空间占用率过高。例如&#xff0c;以图1为例&#xff0c;根目录空间占用率为96%。 根目录空间占用率过高 查询当前系统存在一个约42G 大小的文件access_log&#xff0c;这个文件应该是apache产生的访问日志文件&#xff0c;从日志大小来…

.NET程序在Linux容器中的演变

本文将首先讨论镜像的构建时间和启动时间&#xff0c;接着会将一个简单的.NET程序运行在基于容器的应用上&#xff0c;然后观察镜像大小的变化&#xff0c;最终缩短镜像的构建和加载时间。此外&#xff0c;代码优化是本文的另一个主题。 现在&#xff0c;.NET开发人员可以无障…

微服务的概念——《微服务设计》读书笔记

《领域驱动设计》&#xff08;Eric Evans&#xff09;&#xff1a;告诉我们用代码呈现真实世界的重要性&#xff0c;并且告诉我们如何更好地建模。 持续交付理论&#xff1a;如何更有效及更高效地发布软件品&#xff0c;并指出保持每次提交均可发布的重要性。 六边形架构理论&a…

想要玩转实现负载均衡,你知道这些吗?

转载自 想要玩转实现负载均衡&#xff0c;你知道这些吗&#xff1f; 一、前言 互联网早期&#xff0c;业务流量比较小并且业务逻辑比较简单&#xff0c;单台服务器便可以满足基本的需求&#xff1b;但随着互联网的发展&#xff0c;业务流量越来越大并且业务逻辑也越来越复杂&…

netcore实践:跨平台动态加载native组件

缘起netcore框架下实现基于zmq的应用。在.net framework时代&#xff0c;我们进行zmq开发由很多的选择&#xff0c;比较常用的有clrzmq4和NetMQ。 其中clrzmq是基于libzmq的Interop包装&#xff0c; NetMQ是100%C#的zmq实现&#xff08;基于AsyncIO组件&#xff09;。以上两种…

如何实现酷狗音乐pc页面点击播放时,打开多个歌曲播放时,始终在一个播放页面,(标签页的通讯)

大致有两种思路&#xff0c; 一种是通过wind.open()方法传第二个参数&#xff0c; A页面&#xff1a; //点击跳转播放页函数function toPlayPage(){window.open(path/xxxx/xxxx?name音乐名,music)//第二个参数写一个定值&#xff0c;代表跳转页面都为music标签页&#xff0…

Redis进阶之内存模型

转载自 Redis进阶之内存模型 前言 Redis是目前最火爆的内存数据库之一&#xff0c;通过在内存中读写数据&#xff0c;大大提高了读写速度&#xff0c;可以说Redis是实现网站高并发不可或缺的一部分。 我们使用Redis时&#xff0c;会接触Redis的5种对象类型&#xff08;字符…

C#将引入可空的引用类型

是的&#xff0c;标题没错。C#其中一份新提案假定&#xff0c;所有的引用类型在默认情况下都是不可空的。在新语法下&#xff0c;你需要显式地标明一个引用变量是可空的&#xff0c;就像对值类型所做的那样。 和值类型一样&#xff0c;T是指不可空类型&#xff0c;而T?是指可…

Android中SlidingDrawer开发报错You need to use a Theme.AppCompat theme (or descendant) with this activity.

Android抽屉开发报错You need to use a Theme.AppCompat theme (or descendant) with this activity. 方法1&#xff1a; 创建的activity时&#xff0c;如果不是那么强烈需要继承自AppCompatActivity&#xff0c;就直接继承Activity。 如将activity继承自AppCompatActivity&…

Redis进阶之持久化

转载自 Redis进阶之持久化 一、Redis高可用概述 在介绍Redis高可用之前&#xff0c;先说明一下在Redis的语境中高可用的含义。 我们知道&#xff0c;在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&am…

未来的.NET之多重继承

通过抽象接口引入有限形式的多重继承&#xff0c;这一.NET新提议颇具争议性。该特性是受Java默认方法&#xff08;Default Methods&#xff09;的启发。 默认方法的目的在于允许开发人员修改已发布的抽象接口。修改已发布接口将会产生破坏性的更改&#xff0c;因此在Java和.NE…

React中的方法调用

onClick{demo}//可以调用函数 onClick{demo()}//返回的是undefide

企业级负载均衡如何实现

转载自 企业级负载均衡如何实现 负载均衡简介 首先&#xff0c;我们来了解一下什么是负载均衡&#xff1a; 在一个大型网站中&#xff0c;在线用户有时可能有几千个甚至上万个之多。如果一个用户的请求需要服务使用0.02秒来处理&#xff0c;那么该服务实例每秒钟将只能处理…