您的位置:首页 > 其它

150729听课总结

2015-07-29 11:42 225 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: