150729听课总结

本文详细介绍了查找算法(方法一、二、三)及节点连接(join)操作的实现,涉及C语言基础编程概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

int per[1100];

int n; 
void init()				//初始化节点 
{	
	for(int i=1;i<=n;i++)
		per[i]=i;
}

int find1(int x)		//查找该节点的根,方法一 
{
	int r=x;
	while(r!=per[r])	//当该节点的根与其节点编号不等时,说明该节点不是该序列的根 
		r=per[r];		//当该节点的根与其节点编号不等时,继续查找其父点的节点 
//	per[x]=r;			//令所查找的节点指向根节点,该操作可在join函数中进行,此处可省 
	return r;			//返回根节点 
}

int find2(int x)		//查找方法二 
{
	int r=x;
	while(r!=per[r])
		r=per[r];		//先找到根节点 
	int j,i=x;
	while(i!=r)			//把各节点均连到根节点上 
	{
		per[i]=r;		//把当前节点指向根节点 
		j=per[i];		
		i=j;			//把当前节点转化为其父节点 
	}
	return r;			//返回根节点 
}

int find3(int x)		//查找方法三 
{
	if(x==per[x])		//如果当前节点为根节点,返回根节点 
		return x;
	else return per[x]=find3(per[x]);//否则查找当前父节点的根节点,并交给当前父节点,递归算法 
}

void join(int x,int y)	//连接两节点 
{
	int fx,fy;
	fx=find(x);
	fy=find(y);
	if(fx!=fy)
		per(fx)=fy;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值