并查集测试

1.介绍

**本质:**处理一些不相交的集合合并问题,**比如:**最小生成树,最近公共祖先
操作: 1.初始化init,2.find查询,3.合并union

2.初始化init()

将父节点零散的散开->父节点为本身fa[i]=ifa[i]=i相当于i的祖先是本身(同时作为find的递归结束条件)

int fa[MAX]
void init(int n){
  for(int i=1;i<=10;i++){
    fa[i]=i;//设置每个节点的父节点
  }
}

在这里插入图片描述

3.find()查找祖先节点

过程: 1.base:当前节点的祖先为本身时结束if(fa[i]==i) ——>2.否则不断向上递归寻找父节点 return find(fa[i])

   int find(int i){ //寻找i的祖先节点
      if(fa[i]==i){ //base
       return i;
      }else{
       return find(fa[i]);
      }
   
   }

在这里插入图片描述

4.合并union()

过程: 1. 本质就是得到i的祖先与j的祖先——> 2.然后使i的祖先的祖先j的祖先

  void union(int i,int j){
    int fa_i=find(i); //1.得到i节点的祖先
    int fa_j=find(j); //2.得到j节点的祖先
    fa[fa_i]=fa_j; //3.使i节点的祖先的祖先指向j的祖先
  }

在这里插入图片描述

5.路径压缩

缺点: find递归的时候对子链条进行重复计算 ,普通递归如果链条上为四个节点,那么find一个节点最差需要四次,相反若是路径压缩后,则需要一次
在这里插入图片描述

int find(int i){
  if(fa[i]==i){
  return i; //base:当遍历到祖先节点,自己就是自己的祖先 
  }
  fa[i]=find(fa[i]); //说明i为子树节点,将i的祖先指向它祖先的祖先
  return fa[i]; 
}

案例
#include<stdio.h>
#include<stdlib.h>
#define MAXN 1000
int fa[MAXN];

//1.初始化父节点
void init(int n){
	for(int i=1;i<=n;i++){
		//1.1初始化当前节点的父节点为本身
		fa[i]=i;
	}
}

int find(int x){
	//1.base找到祖先节点=自身节点结束
	if(fa[x]==x) return x;
	else{
		//2.路径压缩,只需寻找一次就能够找到x的祖先节点
     fa[x]=find(fa[x]);
	 return fa[x];
	}
}

//3.合并节点
void unionn(int i,int j){
	//1.首先find节点i和j的祖先节点
	int i_fa=find(i);
	int j_fa=find(j);
	//2.i的祖先的祖先为j的祖先
	fa[i_fa]=j_fa;
}

int main(){
	int number;//人员数量
	int relations; //关系数量
	int first,second;//建立关系的两个temp节点
	int s=1;
	
	printf("请输入人员数量:\n");
	scanf("%d",&number);
	init(number);
	printf("人员初始化成功...\n");
	
	printf("请输入关系个数:\n");
	scanf("%d",&relations);
	for(int i=1;i<=relations;i++){
		printf("输入两个节点,初始化关系..\n");
		scanf("%d,%d",&first,&second); //输入两个节点
		unionn(first,second); //建立关系first->second
	}
	
	
	while(s){
		//1.查询两个节点是否隶属于同一个祖先
		printf("请输入两个节点:\n");
	    scanf("%d,%d",&first,&second);
	    if(find(first)==find(second)){
			//2.相同祖先
			printf("%d和%d是属于同一个祖先\n",first,second);
		}
		s=0;
	}
	
	
	
}

















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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ //练习 1.25 借助网站上的Sales_item.h头文件,编译并运行本节给出的书店程序。

C Primer&#xff08;第5版&#xff09; 练习 1.25 练习 1.25 借助网站上的Sales_item.h头文件&#xff0c;编译并运行本节给出的书店程序。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /********************************…

黑马苍穹外卖Day8学习

文章目录 地址簿功能模块需求分析代码开发 用户下单需求分析代码开发 订单支付微信支付介绍微信支付准备工作代码导入 地址簿功能模块 需求分析 代码开发 Controller层 RestController RequestMapping("/user/addressBook") Slf4j Api(tags "C端-地址簿接口…

docker部署Jira+配置MySQL8数据库

写在前面&#xff1a;如果你通过docker安装Jira且启动过&#xff0c;然后你现在又想使用mysql数据库&#xff0c;需要注意 你除了停掉原有容器&#xff0c;还需要删除&#xff1a;/var/lib/docker/volumes/jiraVolume/_data下的文件&#xff0c;否则启动后会无法正常使用。注意…

MySQL基础笔记(7)约束

顾名思义&#xff0c;用来限制表结构中存储的数据~ 一.概述 作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据&#xff0c;目的在于使数据库中的数据正确、有效性和完整性。 大致可以分为如下的几类&#xff1a; &#xff08;重点关注主键和外键约束~&#xff09; …

揭开UI设计的神秘面纱:如何打造一款让用户爱不释手的移动APP

文章目录 一、目标用户分析二、设计风格和色彩搭配三、布局和导航设计四、交互设计五、视觉元素设计六、响应式设计七、测试和优化八、持续更新和迭代九、团队协作和沟通十、学习和成长《移动APP UI设计与制作(微课版)》编辑推荐内容简介目录 《Flutter入门经典&#xff08;移动…

51单片机_电压采集器电压表

实物演示效果&#xff1a; https://www.bilibili.com/video/BV1My4y1F7xY/?vd_source6ff7cd03af95cd504b60511ef9373a1d 一、基本功能 利用51单片机作为主控芯片&#xff0c;3段式电压采集。模拟量经A/D&#xff08;ADC0809&#xff09;模数转换芯片&#xff0c;把模拟量转换…

开发实践5_project

要求&#xff1a; &#xff08;对作业要求的"Student"稍作了变换&#xff0c;表单名称为“Index”。&#xff09;获得后台 Index 数据&#xff0c;作展示&#xff0c;要求使用分页器&#xff0c;包含上一页、下一页、当前页/总页。 结果&#xff1a; ① preparatio…

OpenAI终于发布GPT Store!全网超300万GPTs,开发者分成、个人定制版在路上!

OpenAI终于发布GPT Store&#xff01;全网超300万GPTs&#xff0c;开发者分成、个人定制版在路上&#xff01; 刚刚&#xff0c;OpenAI 官方发布了 GPT Store。自从开发者大会宣布以来&#xff0c;已经过去了两个月时间&#xff0c;OpenAI 官方表示&#xff0c;用户已经创建了…

Hardware-Aware-Transformers开源项目笔记

文章目录 Hardware-Aware-Transformers开源项目笔记开源项目背景知识nas进化算法进化算法代码示例 开源项目Evolutionary Search1 生成延迟的数据集2 训练延迟预测器3 使延时约束运行搜索算法4. 训练搜索得到的subTransformer5. 根据重训练后的submodel 得到BLEU精度值 代码结构…

易点易动有效管理固定资产出入监控,助力企业降低固定资产丢失率

随着智慧化和数字化进程的深入,RFID(射频识别)技术日益广泛应用。作为一种成熟且成本效益较高的自动识别技术,RFID可以实时追踪和监控资产的流向,有效解决了企业固定资产管理过程中的痛点问题,助力企业降低固定资产丢失率。易点易动为客户提供的RFID固定资产管理系统,通过识别固…

【探索C++容器:vector的使用和模拟实现】

【本节目标】 1.vector的介绍及使用 2.vector深度剖析及模拟实现 1.vector的介绍及使用 1.1 vector的介绍 vertor文档介绍 1. vector是表示可变大小数组的序列容器。2. 就像数组一样&#xff0c;vector也采用连续存储空间来存储元素。也就是意味着可以采用下标对vector的元…

c++:基于c语言基础上的语法不同(1)

前言&#xff1a;此篇文章适合学完c语言基础概念的同学&#xff0c;是帮助c向c语言的同学快速掌握基本语法。 基础格式 #include<iostream>using namespace std; int main() {system("pause");return 0; } 输入&#xff1a; cin>>a;//a是输入内容 输出…

文件系统和IO流

目录 ​文件系统和IO流 一:文件的认知 认识文件 树型结构组织和⽬录: 文件路径&#xff08;Path): 文件形式: 二:File的方法 File的概述: File的属性 File的构造方法 File常用的get系列方法 ⽰例一:观察get系列的特点和差异 File常用的增,删方法 示例二:普通文件…

AI小程序添加深度合成类目解决办法

基于文言一心和gpt等大模型做了一个ai助理小程序&#xff0c;在提交“一点AI助理”小程序时&#xff0c;审核如下&#xff1a; 失败原因1 审核失败原因 你好&#xff0c;你的小程序涉及提供提供文本深度合成技术 (如: AI问答) 等相关服务&#xff0c;请补充选择&#xff1a;深度…

JVM:性能监控工具分析和线上问题排查实践

前言 在日常开发过程中&#xff0c;多少都会碰到一些jvm相关的问题&#xff0c;比如&#xff1a;内存溢出、内存泄漏、cpu利用率飙升到100%、线程死锁、应用异常宕机等。 在这个日益内卷的环境&#xff0c;如何运用好工具分析jvm问题&#xff0c;成为每个java攻城狮必备的技能…

记录自己 自学摸索 学习日语:新标日

新标日 几节课合成在一起太乱了 第四课会更新个集合 自学日语吧算是 摸索中&#xff01; 尽量一周一课 第一课 单词 ちゅうごくじん 中国人 中国人 にほんじん 日本人 日本人 あめりかじん アメリカ人 美国人 かんこくじん 韓国人 韩国人 ふらんすじん フラン…

基于FPGA的图像双边滤波实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 双边滤波数学模型 4.2 双边滤波的特性 4.3 FPGA实现架构 5.算法完整程序工程 1.算法运行效果图预览 将FPGA数据导入到matlab对比测试&#xff1a; 2.算法运行软件版本 vivado2019.2 …

极致画质与流畅播放的完美结合,只在ProVideoPlayer for Mac!

ProVideoPlayer for Mac 是一款功能强大的专业级视频播放软件&#xff0c;旨在提供出色的用户体验和无与伦比的功能。以下是它的一些主要功能介绍&#xff1a; 多格式兼容&#xff1a;ProVideoPlayer for Mac 支持广泛的视频格式&#xff0c;包括常见的MP4、AVI、MOV&#xff0…

docker里Java服务执行ping命令模拟流式输出

文章目录 业务场景处理解决实现ping功能并实时返回输出实现长ping和中断请求docker容器找不到ping命令处理 业务场景 我们某市的客户&#xff0c;一直使用CS版本的信控平台&#xff0c;直接安装客户Windows server服务器上&#xff0c;主要对信号机设备进行在线管理、方案配时…

输电线路分布式故障定位监测装置:保障电力系统的稳定运行

随着电力系统的不断发展和电力需求的日益增长&#xff0c;输电线路的稳定性和安全性显得尤为重要。为了确保电力系统的正常运行&#xff0c;我国科研人员研发出了一种新型的输电线路分布式故障定位监测装置&#xff0c;它能够实时监测输电线路的运行状态&#xff0c;及时发现并…
最新文章