最小生成树--克里斯卡尔(Kruskal)+并查集

本文详细介绍了克鲁斯卡尔算法的基本原理,该算法用于寻找加权无向图的最小生成树。通过将边按权重排序,并逐一检查是否会导致环路形成来构建最小生成树,确保最终生成的树不会有任何闭合路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来源:JK老班

克里斯卡尔:开始时,顶点集包含原图所有的点,边集E是空的。

  1. 先把边从小到大排序。
  2. 从小到大依次选边加入边集E,加入的边要保证树不会形成圈,即(x, y)∈E,当T+(x, y)不会形成圈,就选这条边(把边加入最小生成树(子图)中)。如果会形成圈,不选。

是否形成圈?

x、y是否在同一个连通分支,是,会形成圈。

原来的做法:跑1次DFS,看x能不能到y,能到,是一个连通分支。

查x在哪个连通分支,查y在哪个连通分支,如果x、y不在同一个连通分支,合并。即,如果选了(x , y),有2个连通分支(x所在连通分支,y所在连通分支)要合并。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值