并查集的非递归路径压缩

Posted kgmfgm35

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并查集的非递归路径压缩相关的知识,希望对你有一定的参考价值。

我们知道,递归版路径压缩的实质就是在回溯过程中把沿途出现的爸爸变成兄弟,最终由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 }

以上是关于并查集的非递归路径压缩的主要内容,如果未能解决你的问题,请参考以下文章

冰茶姬详解

并查集的两种实现(按秩合并+路径压缩)

并查集的优化及应用

关于并查集的一切全在这里了

数据结构----并查集

数据结构----并查集