博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Union Find算法总结
阅读量:7071 次
发布时间:2019-06-28

本文共 1027 字,大约阅读时间需要 3 分钟。

基本思想:

  Union Find问题主要用于解决分块问题,对于Union Find问题一般也可以用DFS或BFS解决,但用Union Find更方便一些。该算法一般包含两个函数,Union和Find函数,Find函数就是依据图或树的拓扑关系找到其根节点,Union则是将两个子图或子树合并成一个树。

  具体实现可看如下代码,parent数组存储了当前节点的父节点,如果当前节点为根节点,则其父节点为自己,所以递归调用Find函数直至其父节点等于自身即找到根节点。

  Union函数略复杂,其多了一个rank数组,该数组的作用是决定将子图的合并方式,即rank值小的向rank值大的图合并,直观上来说,就是小图向大图合并。如果两图大小相等,则将第二张图向第一张图合并,并将第一张图的rank值加一。

1 class Solution { 2 public: 3     int Find(vector
&parent,int target){ 4 if(parent[target] == target) 5 return target; 6 return Find(parent,parent[target]); 7 } 8 void Union(vector
&parent,vector
&rank,int v1,int v2){ 9 int p1 = Find(parent,v1);10 int p2 = Find(parent,v2);11 if(p1 == p2) return;12 if(rank[p1] > rank[p2]) parent[p2] = p1;13 else if(rank[p1] < rank[p2]) parent[p1] = p2;14 else{15 parent[p2] = p1;16 rank[p1]++;17 }18 }19 }

 

转载于:https://www.cnblogs.com/haoweizh/p/10179249.html

你可能感兴趣的文章
在IIS上部署Analysis Services
查看>>
一个简单的webdynpro的ALV示例
查看>>
如何给手机网站封壳快速打包封装成APP?
查看>>
关于PTA平台上使用python2/3书写代码误判问题
查看>>
php中使用curl发送请求和图片压缩
查看>>
sharepoint webpart 普通用户无法访问
查看>>
3月4日作业点评
查看>>
转载--Linux命令top动态观察程序的变化
查看>>
中小型研发团队架构实践十:应用监控怎么做?
查看>>
Django model :add a non-nullable field 'SKU' to product without a default; we can't do that
查看>>
20.SSM整合-全注解开发
查看>>
让我欲罢不能的node.js
查看>>
js--webSocket入门
查看>>
request:实现页面包含
查看>>
[置顶] ASP.NET环境的基本配置——VS2008+SQLEXPRESS+IIS5.1/IIS7.0
查看>>
冲刺阶段第八天
查看>>
SignalR指定用户推送消息
查看>>
PHP 数组模糊查询
查看>>
BGP协议
查看>>
关于同步、异步与阻塞、非阻塞的理解
查看>>