#include <stdio.h>
#include <stdlib.h>
typedef struct{
int p;
int q;
}pair;
/***************************************************************
连通性问题之快速查找运算:
数组具有如下性质: 当且仅当第p个和第q个数组想相等时,p与q连通。
算法: 将第i个元素初始化为i,其中0<=i<N。为了对p与q实现并集运算,
遍历数组,将所有和第p个元素值相等的元素的值更改为第q个元素的值.
性能: 对于具有N个对象,每个对象包括M个并集运算的连通性问题,
该算法的性能为O(M*N)
参数: m: 连通对的个数, n: n个对象
***************************************************************/
void connectivity_quickfind(pair pairs[], int m, int id[], int n)
{
int p, q, i, j, t;
for (i = 0; i < n; ++i)
{
id[i] = i;
}
for (i = 0; i < m; ++i)
{
p = pairs[i].p;
q = pairs[i].q;
if (id[p] == id[q]) continue;
for (t = id[p], j = 0; j < n; ++j)
{
if (id[j] == t) id[j] = id[q];
}
pri
连通性问题--《C算法》学习笔记
最新推荐文章于 2021-11-12 09:34:26 发布
本文详细介绍了连通性问题,并提供了快速查找、快速并集、加权快速并集和带路径压缩的加权快速并集四种算法的C语言实现,帮助理解并查集在解决连通性问题上的应用。
摘要由CSDN通过智能技术生成