并查集(Disjiont Set)

并查集

并查集的最大作用是检测一个图上面存不存在环。
在这里插入图片描述
无向图,六个顶点
显然 1-2-4-3连成一个环

#include<stdio.h>
#include<stdlib.h>#define  VERTICES 6void initialise(int parent[]){int i;for(i=0;i<VERTICES;i++){parent[i]=-1; }}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 successfully ,0-failed*/
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){return 0;} else{parent[x_root]=y_root;return 1;}}int main(){int parent[VERTICES]={0};int edges[6][2]={{0,1},{1,2},{1,3},{2,4},{3,4},{2,5}};initialise(parent);int i;for(i=0;i<6;i++){int x=edges[i][0];int y=edges[i][1];if(union_vertices(x,y,parent)){printf("Cycle detected!\n");exit(0);}}	printf("no cycle found.\n");return 0;
}

进行优化后:

#include<stdio.h>
#include<stdlib.h>#define  VERTICES 6void initialise(int parent[],int rank[]) {int i;for(i=0; i<VERTICES; i++) {parent[i]=-1;rank[i]=0;}}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 successfully ,0-failed*/
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) {return 0;} else {
//		parent[x_root]=y_root;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]++;}return 1;}}int main(void) {int parent[VERTICES]= {0};int rank[VERTICES]= {0};int edges[6][2]= {{0,1},{1,2},{1,3},{2,4},{3,4},{2,5}};initialise(parent,rank);for(int i=0; i<6; i++) {int x=edges[i][0];int y=edges[i][1];if((union_vertices(x,y,parent,rank)==0)) {printf("Cycle detected!\n");exit(0);}}printf("no cycle found.\n");return 0;
}

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

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

相关文章

采用Kruskal算法生成最小生成树,并采用并查集的合并优化和查询优化。

文章目录最小生成树1.什么是图的最小生成树&#xff08;MST&#xff09;?2.最小生成树用来解决什么问题&#xff1f;Kruskal&#xff08;克鲁斯卡尔&#xff09;算法算法描述图解最小生成树 1.什么是图的最小生成树&#xff08;MST&#xff09;? 用N-1条边连接N个点&#x…

Java连接Mysql数据库(JDBC)

文章目录导入包con、stmt、rs 三者存在一定的关系getInt和getStringinput.nextInt();简单使用讲解ResultSet和StatementPreparedStatement的用法JDBC连接代码更多样例导入包 import java.sql.Connection; import java.sql.DriverManager; import java.sql.statement; import j…

Linux编程考前测试题

文章目录选择题多选题判断题填空题简答题编程题选择题 1:当打开vi文本编辑器编辑文件时&#xff0c;vi处于&#xff08;A&#xff09;模式 A: 命令模式 B: 编辑模式 C: 实模式 D: 虚模式 2:下列有关fork&#xff08;&#xff09;函数返回值说法错误的是&#xff08;D&#xf…

MySQL考试复习(知识点、练习题)

文章目录数据库的管理技术的三个阶段发展的三个阶段数据库的锁数据库设计的基本步骤事务的四大特性什么是视图如果关系模式设计不好&#xff0c;可能带来哪几个问题数据库管理系统的主要功能有哪些数据库系统中的常见故障有哪些简述SQL语言的组成说明关系模型有哪三类完整性规则…

Oracle复习(知识点、练习题、实验)

文章目录第一章 数据库概念数据库的三级模式结构&#xff1a;模式、外模式、内模式三级模式之间的映射第二章 Oracle12g体系结构Oracle的逻辑存储结构Oracle物理存储结构Oracle11g服务器结构系统全局区&#xff08;SGA&#xff09;程序全局区&#xff08;PGA&#xff09;第三章…

Openstack面试题和知识点总结

文章目录知识点云计算起源定义特点分类服务类型平台分类应用虚拟化虚拟化技术定义分类云计算和虚拟化的关系虚拟化的优点OpenStack简介核心架构Openstack组件共享服务组件核心组件组件详解RabbitMQ概念特点rabbitmq中的概念工作原理常用操作MemcachedKeystoneGlance工作原理Nov…

auto.js 实现信息发送、QQ点赞、微信点赞、健康日报签到

文章目录auto.js开发文档安装total control在手机端安装auto.js apk安装vscode短信多条发送QQ点赞微信点赞健康日报填写叠猫猫auto.js开发文档 点击学习 安装total control total control 用于手机投屏在电脑屏幕上 在手机端安装auto.js apk 链接&#xff1a;https://pan.…

MapReduce综合学习含Wordcount案例

文章目录MapReduce简介MapTaskReduceTaskMapper阶段解读Reducer阶段解读MapReduce适用的问题MapReduce的特点MapReduce基本思想大数据处理思想&#xff1a;分而治之构建抽象模型&#xff1a;Map 函数和 Reduce 函数上升到架构&#xff1a;并行自动化并隐藏底层细节MapReduce计算…

基于Spring boot+Vue的在线考试系统

文章目录spring boot 分层图解安装idea配置阿里云镜像项目启动前端项目结构项目前端中index.htmlApp.vuemain.jsrouter整个页面渲染过程关于矢量图图标的使用引入JQuery依赖github-markdown-css样式文件-一般用作文章正文的样式美化spring boot 分层图解 安装idea 安装参考 id…

Java基础总结之(面试)

文章目录Java标识符Java修饰符访问权限修饰符访问控制和继承非访问权限修饰符局部变量修饰符接口接口中方法修饰符运算符算术运算符一元运算符二元运算符算术赋值运算符赋值运算符逻辑运算符&#xff08;&&、||和!&#xff09;关系运算符自增和自减运算符&#xff08;和…

Javaweb练手项目

文章目录学生管理系统音乐网站锋芒博客中医药管理系统博客天梯CMS系统锋芒社团官网学生管理系统 实现技术&#xff1a;ServletMVC&#xff08;模式&#xff09;Filter(过滤器&#xff09;html 主要功能&#xff1a;学生信息的增删查改&#xff0c;文件&#xff08;图片&#x…

Spark之scala学习(基础篇)待更新

文章目录引言大数据介绍大数据与云计算区别大数据和人工智能的区别大数据和传统的分析&#xff08;excel&#xff09;的区别scala的特性面向对象特性函数式编程函数式编程的特点&#xff1a;函数式编程的优势静态类型扩展性并发性为什么要学scalascala安装简单测试了解ScalaSca…

Jupyter Notebook的安装及问题解决方案

文章目录下载并安装Anaconda3更改主界面路径但是如果没有jupyter_notebook_config.py文件怎么办&#xff1f;如果更改过路径后&#xff0c;不生效怎么办&#xff1f;使用参考pycharm导入pyspark下载并安装Anaconda3 官网下载个人版 Anaconda3安装参考 点击&#xff0c;然后进…

airodump-ng wlan0mon扫描不到网络_MySQL ProxySql 由于漏洞扫描导致的 PROXYSQL CPU 超高...

ProxySQL 本身是一款非常棒的MYSQL 中间件的开源产品, 在公司运行了一段时间后,突然一天报警,所在机器的CPU 出奇的高,之前在测试系统, 预生产, 以及生产系统均没有出现问题. 开始未来紧急解决问题,重新启动了proxysql服务,并查看错误日志.PROXYSQL 的系统版本的2.012 MYSQL 的…

4个空格和一个tab有什么区别_火花塞为什么一换就是4个?只换一个不行吗?

火花塞不是一个经常被提及的配件&#xff0c;但如果火花塞老化&#xff0c;车辆的整体性能将受到影响&#xff0c;更换火花塞其实也是日常保养的一部分&#xff0c;就像换机油和三滤一样。不知道大家是否注意到&#xff0c;在做完保养之后&#xff0c;维修师傅会帮你检查一下火…

小型云台用的是什么电机_直流电机的工作原理是什么?未来的电动车都会用直流电机吗?...

说起直流电机&#xff0c;其实我们每个人&#xff0c;每天都在用。是吗&#xff1f;别惊讶&#xff0c;是的。手机&#xff0c;我们每天都在用&#xff0c;有消息或者有电话时&#xff0c;手机就开始振动。这个振动就是用直流电机来实现的。当然&#xff0c;直流电机在其他领域…

C语言、C++学习路线

文章目录C语言 C语言大纲 C语言知识点总结图 C语言视频推荐基础篇进阶篇速成篇基础入门之游戏实战篇C语言核心链表文档教程视频教程文件C语言实例C C大纲岗位分析 C与C 编程基础四大件数据结构与算法计算机网络操作系统设计模式C视频推荐C语言 C语言大纲 C语言知识点总结图 C语…

2020年日历_2020年《故宫日历》发布:浓缩紫禁城600年沧桑

2020年《故宫日历》。中国网记者 刘维佳/摄中国网8月26日讯(记者 刘维佳) 2020年《故宫日历》发布会今日在故宫博物院建福宫举行。2020年为庚子鼠年&#xff0c;亦正值紫禁城建成六百周年&#xff0c;因此&#xff0c;2020年《故宫日历》是为纪念紫禁城六百周年而特别呈现。故宫…

jav简单的个人博客网站代码_每个人都可以拥有的个人博客网站

题记------去过的地方越多&#xff0c;越知道自己想回到什么地方去&#xff01;雨又下了一夜&#xff0c;曾经多少次觉得下雨天是最适合睡觉的天气。而最近的雨&#xff0c;总感觉有些嘈杂&#xff0c;总怕吵醒远方睡梦中的星&#xff0c;晨。以至于翻来覆去睡不着。但是&#…

泰禾光电机器人研发_机器之眼 | 3D相机能让机器人看见什么?

“中国制造2025”&#xff0c;其核心环节之一就是机器人智能化。视觉技术代表了机器的眼睛和大脑&#xff0c;机器视觉将使得机器人智能化变成现实。为了使机器人能够胜任更复杂的工作&#xff0c;机器人不但要有更好的控制系统&#xff0c;还需要更多地感知环境的变化。机器人…