不相交集

《数据结构与算法分析——C语言描述》  第八章


disjset.h

#ifndef _DisjSet_H
#define _DisjSet_H
#define NumSets 22

typedef int DisjSet[NumSets + 1];//DisjSet为一个数组类型
typedef int SetType;
typedef int ElementType;

void initilialize_disjSet(DisjSet s);
void setUnion_disjSet(DisjSet s, SetType root1, SetType root2);
SetType find_disjSet(ElementType X, DisjSet s);

#endif


disjset.c

#include"disjset.h"

void initilialize_disjSet(DisjSet s) {
	for (int i = NumSets; i > 0; i--)
		s[i] = 0;
}

void setUnion_disjSet(DisjSet s, SetType root1, SetType root2) {
	if (s[root2] < s[root1]) {
		s[root1] = root2;
	}
	else {
		if (s[root2] == s[root1])
			s[root1]--;
		s[root2] = root1;
	}
}

SetType find_disjSet(ElementType X, DisjSet s) {
	if (s[X] <= 0)
		return X;
	else
		return s[X]= find_disjSet(s[X], s);
}


main.c

#include<stdio.h>
#include"disjset.h"


int main() {
	DisjSet s;
	initilialize_disjSet(s);
	int u, v;
	printf("enter the connection\n");
	
	while (scanf("%d%d", &u, &v) == 2) {
		SetType utype = find_disjSet(u, s);
		SetType ttype = find_disjSet(v, s);
		if (utype == ttype)
			printf("has connected\n");
		else {
			printf("conncet them\n");
			setUnion_disjSet(s, utype,ttype);
		}
		printf("enter the connection\n");
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值