1. 花式查找并查集


class DisjointSet:def __init__(self, n):# Args:#   n (int): Number of vertices in the graph
self.parent = [None] * n  # Contains which node is the parent of the node at poisition <i>self.size = [1] * n  # Contains size of node at index <i>, used to optimize mergefor i in range(n):self.parent[i] = i  # Make all nodes his own parent, creating n sets.def find_set(self, a):if self.parent[a] != a: # Very important, memoize result of the recursion in the list to optimize next# calls and make this operation practically constant, O(1)self.parent[a] = find_set(self.parent[a])# node <a> it's the set root, so we can return that indexreturn self.parent[a]def find_set2(self, a):parent_n = aparent_n1 = self.parent[parent_n]while parent_n1 != parent_n: time.sleep(2)parent_n = parent_n1parent_n1 = self.parent[parent_n]print(parent_n1, parent_n, a)return parent_n1def find_set3(self, a):visited, que = set(), [a]u = self.parent[a]while que: time.sleep(2)u = que.pop()if u not in visited:print(f"u={u} was visited")visited.add(u)que.append(self.parent[u])return udef find_set4(self, a):parent_n1 = awhile 1: time.sleep(2)parent_n = parent_n1parent_n1 = self.parent[parent_n]if parent_n1 == parent_n:breakprint(parent_n1, parent_n, a)return parent_n1def find_set5(self, a):parent_n = awhile 1: time.sleep(2)parent_n1 = self.parent[parent_n]if parent_n1 == parent_n:breakparent_n = parent_n1print(parent_n1, parent_n, a)return parent_n1def find_set6(self, a):parent_n = aparent_n1 = self.parent[parent_n]while 1: if parent_n1 != parent_n:  # 收敛条件breaktime.sleep(2)parent_n = parent_n1parent_n1 = self.parent[parent_n]print(parent_n1, parent_n, a)return parent_n1

转载于:https://www.cnblogs.com/wdmx/p/10078468.html

图及算法----并查集父亲查找写法比较 DisjointSet相关推荐

  1. UVA10034 Freckles【Kruskal算法+并查集】

    In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back to fo ...

  2. java并查集_一个非常实用而且精妙的算法-并查集(java语言实现)

    在学习数据结构的时候,老师多少会提到并查集,他的应用也是超级广泛.本文首先会通过案例来对并查集有一个介绍.然后给出并查集的java实现. 一.并查集原理 话说在江湖上有很多门派,这些门派相互争夺武林霸 ...

  3. [基础算法] 并查集

    并查集 1.将两个集合合并 2.查询两个集合是否在同一个集合中 基本原理:每个集合用同一棵树来表示,树根的编号就是树的编号,每个节点储存其父节点,p[x]表示x的父节点. 问题一:如何判断是否为根节点 ...

  4. 使用并查集实现查找无向图的连通分量和求解有向图的强连通分量

    目录 1.无向图的连通分量 2.求解连通分量算法的实现 3.有向图的强连通分量 4.求解有向图的强连通分量 使用C语言实现并查集 有向图和无向图 1.无向图的连通分量 无向图G中,如果存在从顶点v1到 ...

  5. 最小生成树kruskal算法并查集版 C语言实现

    今天数据结构课讲了最小生成树的Kruskal算法和Prim算法,不过都只是概念,可能是怕他们听不懂吧,反正算法实现一概不讲...囧 下午抱着<算法导论>跑去图书馆看Kruskal算法,发现 ...

  6. c++入门必学算法 并查集

    一.什么是并查集 并查集其实就是实现一个类似朋友圈的功能,朋友的朋友是朋友,朋友的朋友的朋友也是朋友,即只要有关系一些人就合并成为一个朋友圈. 并查集可以实现查询两个人是否是朋友,查询朋友圈的个数 二 ...

  7. 数据结构与算法——并查集(不相交集合)

    文章目录 认识并查集 并查集解析 基本思想 如何查看a,b是否在一个集合? a,b合并,究竟是a的祖先合并在b的祖先上,还是b的祖先合并在a上? 其他路径压缩? 代码实现 结语 认识并查集 对于并查集 ...

  8. vb6实现union数据结构_数据结构与算法——并查集(不相交集合)

    首发公众号:bigsai 认识并查集 对于并查集(不相交集合),很多人会感到很陌生,没听过或者不是特别了解.实际上并查集是一种挺高效的数据结构.实现简单,只是所有元素统一遵从一个规律所以让办事情的效率 ...

  9. Kruscal算法+并查集 求解最小生成树

    http://ac.jobdu.com/problem.php?pid=1347    孤岛连通工程 刚开始的时候使用qsort排序函数进行排序提交一直都是TLE,后来无意中改为sort排序函数提交就 ...

  10. 最小生成树KrusKal算法(并查集)

    洛谷p1111链接 克鲁斯卡尔算法的思路就是由森林变成树的过程,其中最主要的就是贪心和并查集的应用. 我们知道链接n个点需要n-1条边,这就满足的最后生成的是一颗树,而不是一个环.在这n-1条边的选择 ...

最新文章

  1. windows下搭建hadoop-2.6.0本地idea开发环境
  2. linux open 缓冲区,Linux上文件的默认缓冲区大小
  3. JSONObject和JSONArray(json-lib-2.4)的基本用法
  4. [转载] 变形金刚1
  5. java ror框架搭建_ROR 环境的 搭建
  6. 编写python程序一年365天_编写第一个Python程序
  7. lambda 表达式中的 this 与普通情况下的 this 指向
  8. 冠状病毒过后世界九大未来预测
  9. java string 日期_java string类型日期比较
  10. 服务器进入bios用u盘启动不了系统,用u盘装系统,进入bios后没有usb启动项怎么办...
  11. jquery 下拉选择框/复选框常用操作
  12. xpath定位相邻元素方法
  13. Redis进阶: 锁的使用
  14. I/O error on GET request for http://userservice/user/point/update: userservice; nested exception
  15. UG+PRESSCAD五金连续模 成型模 复合模具设计视频教程
  16. 1.回文是指正读和反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈。)2.假设以带头结点的循环链
  17. 数字信号处理(3)- z变换
  18. linux基础(四):shell简单命令;文件系统命令,系统操作命令,文本操作命令;文本处理命令
  19. 零基础教会你用github创建个人博客网站
  20. iPhone4S安装Linux系统,Absinthe 2.0.4 官网Windows/Mac/Linux原版下载—iPhone4S和iPad2完美越狱工具...

热门文章

  1. ios中xib的使用介绍
  2. [Xamarin] 客製化的ListView之章 (转帖)
  3. Khronos关于WebGL最新进展
  4. 教你如何理解Vue中的nextTick
  5. js给列表设置统一的高度
  6. Maven的parent pom的依赖
  7. Centos7---1708 Linux上安装ZooKeeper 以及JDK1.8安装
  8. leetcode探索动态规划(三)
  9. android的子菜单是否支持嵌套,Android的两种菜单
  10. 爬虫实例7 爬取豆瓣电影数据 (json+ajax)