1 # 并查集实现
 2 class Node:
 3     pass
 4
 5 class UnionFindSet:
 6     def __init__(self, nodes):
 7         self.fatherDict = dict()
 8         self.sizeDict = dict()
 9         for node in nodes:
10             self.fatherDict[node] = node
11             self.sizeDict[node] = 1
12
13     # def findHead(self, node):
14     #     father = self.fatherDict.get(node)
15     #     if node!=father:
16     #         father = self.findHead(father)
17     #     self.fatherDict[node] = father
18     #     return father
19
20     def findHead(self, node):           # 找到当前节点的头
21         stack = []                      # 每次查询都会优化,经过的节点会直接指向头结点
22         father = self.fatherDict[node]
23         while node != father:
24             stack.append(node)
25             node = father
26             father = self.fatherDict[node]
27         while len(stack) > 0:
28             self.fatherDict[stack.pop()] = father
29         return father
30
31     def isSameSet(self, a, b):
32         return self.findHead(a) == self.findHead(b)
33
34     def uion(self, a, b):                  # 两集合合并
35         if a is None or b is None:
36             return
37         aHead = self.findHead(a)
38         bHead = self.findHead(b)
39         if aHead != bHead:
40             aSize = self.sizeDict[aHead]
41             bSize = self.sizeDict[bHead]
42             if aSize <= bSize:
43                 self.fatherDict[aHead] = bHead
44                 self.sizeDict[bHead] = aSize + bSize
45             else:
46                 self.fatherDict[bHead] = aHead
47                 self.sizeDict[aHead] = aSize + bSize

转载于:https://www.cnblogs.com/icekx/p/9142317.html

并查集 Python实现相关推荐

  1. [L氏并查集] Python 列表法实现非递归并查集,轻松权重优化。

    一般的并查集都是用递归或者新建一个类来实现,这里介绍一种用Python来实现的非递归非函数并查集,这个方法暂时未在其他地方见过,尤其是中文领域目前还未见过,很可能是搜索引擎无法搜索到正确内容的原因,所 ...

  2. 【Python数据结构】——并查集的实现(查找、合并、集合、实例)

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/7/30 23:12 # @Author : @linlianqin # @S ...

  3. 数据结构之并查集:并查集解决案例, Python——21

    并查集解决案例畅通工程 案例问题介绍: 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通 ...

  4. 数据结构之并查集:并查集的介绍与Python代码实现——18

    并查集的介绍 并查集(Union-find)数据结构也称作合并查找集(Merge-find set)或者不相交集数据结构(disjoint-set data structure),它是一种记录了由一个 ...

  5. LeetCode题库:并查集问题(Python语言实现)

    并查集相关知识 并查集常用模板 class UnionSet:def init_tree(self,n):self.fa = [i for i in range(n)] # 必要,记录根节点,也可能是 ...

  6. 并查集(python代码实现)

    并查集 并查集是一种树型的数据结构,用于处理一些不相交集合的合并与查询问题.主要两种操作(合并和查询): 根据两个元素的关系合并两个集合: 查询两个元素是否存在关系(是否在同一个集合中)和查询节点的根 ...

  7. python【数据结构与算法】并查集引入

    文章目录 1 并查集 2 策略 3 代码 1 并查集 Disjoint Set,实际上字面翻译是不相交的集合. 中文名 "并查集" 实际上源自其基本操作: union(X,Y):求 ...

  8. Python:每日一题之小猪存钱罐(并查集)

    题目描述 Byteazar the Dragon 拥有 N 个小猪存钱罐.每一个存钱罐能够用相应的钥匙打开或者被砸开.Byteazar 已经将钥匙放入到一些存钱罐中.现在已知每个钥匙所在的存钱罐,By ...

  9. 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈

    题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...

最新文章

  1. golang zerolog包使用
  2. PyQt5-关闭窗体显示提示框(窗口界面显示器上居中)-5
  3. java8中-_java8中的Stream
  4. 【机器学习】 - 关于合适用均方误差(MSE)何时用交叉熵(cross-entropy)
  5. django-前端上传图片190912
  6. 【转】去掉换行符的几个方法
  7. 聊聊时间管理,不是多人运动那种
  8. 七个小技巧保护无线网络安全
  9. 单反相机入门教程视频(48集)
  10. jQuery设置iframe的高度
  11. Windows安装zookeeper和kafka
  12. 海康威视网络摄像头Demo示例研究
  13. 华为云计算认证考试大纲是什么?华为云计算认证含金量高吗?
  14. qt 合并单元格 tablewidget 合并单元格
  15. python二手房使用教程_python爬取安居客二手房网站数据方法分享
  16. ps添加的阴影怎么去除_去除人物照片脸部阴影的PS技巧
  17. Java基础——对象和类1(面向对象基本概念)
  18. 手工从grub引导进入Ubuntu16.04
  19. 苹果宣布推出新的Mac Mini和MacBook Pro与M2 Pro和M2 Max
  20. java华容道代码_用java编程 华容道游戏

热门文章

  1. Java语言基础JavaScript
  2. mysql中文注释语法报错_Linux系统Python配置MySQL详细教程
  3. Graphpad Prism计算IC50
  4. Java实现清屏功能
  5. Matlab | 用Matlab写一首歌送给女朋友——程序员必备撩妹技能(Matlab源码)
  6. java system_深入分析java中的System
  7. python3精要(23)-递归与函数列表
  8. tensorflow随笔-队列管理器QueueRunner-生产者与消费者
  9. vb.net2019- 串口serial port通信
  10. 上海女博士“择偶条件”惹争议,相亲像是在许愿,网友:别做梦了 !