算法分析与实践-作业1-2kruskal构造最小生成树

Krsukal算法构造最小生成

1. 问题

Krsukal 算法通过不断加入图中最小的边,若构成回路则不添加,通过并查集来检查是否构成回路,通过最小堆对边进行存储,直到将图的边加到顶点-1为止,如果添加不到顶点-1条边则构不成最小生成树。

2、分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、设计

Int Krsukal(MGraph Graph,LGraph MST)
{
Int totalweight,ecount;
/定义边数组与顶点数组/
Eset,Vset;
初始化顶点数组都使每个顶点为根节点,Vset[x]=-1;
/定义并查集/
/初始化边数组,使加入的每一个边不重复/
/建立最小堆/
Heap;
/将边数组保存在最小堆中/
Int nextedge;
/定义下一个加进的边,初始值为边数组的最后一个元素Graph->ne/
while(ecountnv-1){
Nextedge=getedge(…😉/定义函数将边数组中的0位置与nextedge位置交换,调整最小堆/
If(Nextedge<0)break;/如果边数组为空,跳出循环/
If(checkis())/检查是否构成回路/
Insert(MST,Eset[Nextedge])
Ecount++;
Totalweight+=Eset[nextedge].weight;
}
}

4、源码

源码地址:https://github.com/ACynj/ynjkruskal.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值