并查集的模板及其进一步优化

void initial(int s[]) {
	for (int i = 0; i < SiZE; i++) {
		s[i] = -1;
	}
}

//int Find(int s[],int x) {
//	while (s[x] >= 0)
//		x = s[x];
//	return x;
//}


//void Union(int s[],int Root1,int Root2) {
//	if (Root1 == Root2)return;
//	s[Root2] = Root1;
//}
int main() {
	return 0;
}

find函数优化

int Find(int s[], int x) {
	int root = x;
	//找到它的根
	while (s[root] >= 0)root = s[root];
	//将他的父节点接到最上面的根上面去
	while (root != x) {
		int t = s[x];
		s[x] = root;
		x = t;
	}
	return root;
}

Union函数优化

void Union(int s[], int Root1, int Root2) {
	if (Root1 == Root2)return;
	if (s[Root1] < s[Root2]) {
		s[Root1] += s[Root2];
		s[Root2] = Root1;
	}
	else {
		s[Root2] += s[Root1];
		s[Root1] = Root2;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值