mst_kruskal python 实现(查并集)

本文详细介绍了如何用Python实现Kruskal算法,该算法是一种寻找加权无向图最小生成树的方法。通过查找节点的根节点判断边是否构成环,并按边的权重进行升序排序。在示例中,展示了算法的具体步骤和最终输出的最小生成树边集及其总成本。
摘要由CSDN通过智能技术生成

思路:kruskal算法,是边驱动的mst算法。依次将最小边纳入,至形成最小数。将每棵子树的根节点作为分类判定依据,据此判定一条边的两个端点是否已经连通,若根节点相同则已经连通,否则未连通。

def find(x, pres):
“”"
查找x的最上级(根节点)
:param x: 要查找的数
:param pres: 每个元素的首级
:return: 根结点(元素的首领结点)
“”"
root, p = x, x # root:根节点, p:指针

# 找根节点
while root != pres[root]:
    root = pres[root]

# 路径压缩,把每个经过的结点的上一级设为root(直接设为首级)
while p != pres[p]:
    p, pres[p] = pres[p], root
return root

def join(x, y, pres, ranks):
“”"
合并两个元素(合并两个集合)
:param x: 第一个元素
:param y: 第二个元素
:param pres: 每个元素的上一级
:param ranks: 每个元素作为根节点时的秩(树的深度)
:return: None
“”"
h1, h2 = find(x, pres), find(y, pres)
# 当两个元素不是同一组的时候才合并
# 按秩合并
if h1 != h2:
if ranks[h1] < ranks[h2]:
pres[h1] = h2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值