当前位置: 首页 > news >正文

并查集的应用

 

目录

1.并查集的代码 

2.union操作

3.find操作

4.图


写代码:定义一个并查集(用长度为n的数组实现) 
基于上述定义,实现并查集的基本操作—— 并 Union 
基于上述定义,实现并查集的基本操作—— 查 Find 
自己设计一个例子,并查集初始有10个元素,进行若干次Union操作,画出每一次Union后的样子 
自己设计一个例子,基于上一步得到的并查集,进行若干次find操作(每次find会进行“路径压缩”)。画出每次 find (路径压缩)后的样子 

1.并查集的代码 

2.union操作

3.find操作

#include <stdio.h>
#include <stdlib.h>
#define SIZE 100
int UFSets[SIZE];//集合元素数组(双亲指针数组) //初始化操作
void initial(int s[])//s即为并查集 
{for(int i=0;i<SIZE;i++){//每个自成单元素集合 //TODOs[i]=-1;}
} //find操作
int find(int s[],int x) 
{while(s[x]>=0){//循环寻找x的根 //TODOx=s[x];}return x;//根的s[]小于0 
} //union操作
void union(int s[],int root1,int root2)
{if(root1==root2){//TODOreturn;//要求root1和root2是不同的集合 }s[root2]=root1;//将根root2连接到另一根root1下面 
} 
//优化后的union操作
void Union(int S[] ,int Root1,int Root2)
{if(Root1==Root2){//TODOreturn;}if(S[Root2]>S[Root1]){//Root2的结点数更少 //TODOS[Root1]+=S[Root2];//累加集合树的结点总数 S[Root2]=Root1;//小树合并到大树 } else{               //Root1结点数更少 S[Root2]+=S[Root1];//累加到结点总数 S[Root1]=Root2;//小数合并到大树 }
} 
//优化后的find操作
int Find(int S[],int x)
{int root=x;while(S[root]>=0){//循坏找到根 //TODOroot=S[root];}while(x!=root){//压缩路径 //TODOint t=S[x];//t指向x的父结点 S[x]=root;//x直接挂到根结点下面 x=t;}return root; //返回根结点的编号 
} 

4.图


http://www.mrgr.cn/news/28668.html

相关文章:

  • mmsegmentation: 安装 并使用自定义数据集进行训练 ·1
  • C++中的栈(Stack)和堆(Heap)
  • 炼码LintCode--数据库题库(级别:入门;数量:144道)--刷题笔记_01
  • RabbitMQ集群搭建
  • Python →爬虫实践
  • ESLint 使用教程(四):ESLint 有哪些执行时机?
  • Python3网络爬虫开发实战(15)Scrapy 框架的使用
  • 找搭子是什么意思?有没有找搭子的平台?靠谱找搭子软件推荐!
  • 7.4 溪降技术:滑行
  • 【机器学习】--- 自监督学习
  • 华硕产品资料的查询方法
  • 【Kubernetes】常见面试题汇总(二十一)
  • 如何避免长距离遗忘问题
  • 18、Python如何读写csv文件
  • 关于一道逻辑思维训练题的理解(手表、闹钟、标准时间的骗局)
  • 【计网面试真题】If-Modified-Since和Etag有什么区别
  • 简单的16位CPU(中央处理单元) verilog设计 (完整全部代码)
  • ST表(算法篇)
  • 音视频开发之旅(94)-多模态之Blip-2
  • 第一次安装Pytorch
  • MessagesPlaceholder
  • uniapp中实现<text>文本内容点击可复制或拨打电话
  • [性能]高速收发的TCP/MQTT通信
  • 微服务_1、入门
  • 使用卷积神经网络进行人类活动识别的特征学习:惯性测量单元和音频数据的案例研究
  • macOS Sequoia 15 发布,iPhone 镜像、密码应用程序、窗口平铺更新等带来全新体验