码迷,mamicode.com
首页 > 其他好文 > 详细

并查集的非递归路径压缩

时间:2020-01-17 22:51:26      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:如何   temp   int   span   父节点   div   roo   直接   迭代   

我们知道,递归版路径压缩的实质就是在回溯过程中把沿途出现的爸爸变成兄弟,最终由N代同堂变成二代同堂。

所以我们可以利用这样的方法写出非递归路径压缩。

首先要找到根节点root,然后从当前位置出发寻找根节点,沿途得到的父亲节点father全部直接指向根节点。

如何得到沿途的父节点呢?当然是迭代啦!

 1 int find(int d)
 2 {
 3     int now,temp,root;
 4     
 5     root=d;
 6     while(root!=father[root])
 7     {
 8         root=father[root];
 9     }
10     now=d;
11     while(now!=root)
12     {
13         temp=father[now];
14         father[now]=root;
15         now=temp;
16     }
17     return root;
18 }

并查集的非递归路径压缩

标签:如何   temp   int   span   父节点   div   roo   直接   迭代   

原文地址:https://www.cnblogs.com/kgmfgm35/p/12207711.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!