c/c++的小知识点:并查集

本文介绍了并查集这一数据结构在旅行路线规划和朋友圈问题中的运用。并查集通过find和union两个基本操作实现元素的查找与集合合并。find操作寻找元素的根节点,union操作将两个子集合并。并查集常用于解决连接关系和不相交集合的问题,如森林结构。在旅行路线规划和朋友圈场景中,可以高效地判断路径连通性和社交网络的关系。
摘要由CSDN通过智能技术生成

在朋友圈、旅游线路等问题中均使用到并查集的概念,在数据结构中讲过这个知识点

 相关题目:

1.旅行路线规划

PTA | 程序设计类实验辅助教学平台

2.朋友圈

PTA | 程序设计类实验辅助教学平台

3.畅通工程

并查集有两个基本操作

1.find:查找元素所属子集

2.union:合并两个子集为一个新的集合

并查集的基本结构:树

不同的树就是不同的集合,树的集合是森林,所以并查集属于森林

对于Find操作,代码非常简单

int find(int x)
{
    return parent[x] == x ? x : find(parent[x]);
}

该代码比较元素x的父节点parent[x]是否等于x自身,如果是便说明找到了根节点(根节点的父节点是自身),直接返回;否则,把x的父节点parent[x]传入find,直到找到根节点。


下面是union操作

void to_union(int x1, int x2) 
{
    int p1 = find(x1);
    int p2 = find(x2);
    parent[p1] = p2;
}

传入两个元素,分别找到根节点,使根节点p1的父节点为p2,即将p1为根节点的这棵树合并到p2为根节点的树上。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值