最小生成树:克鲁斯卡尔算法的构造解释及代码编写

一,大致的遍历过程图解及过程讲解

总连通网如右下角所示。

从所有权值中找到最小值,若不连通,则添加该边无回路则正确

1,如下图(a),先找到最小边AC,加入;

2,图(b),找到下一个最小边DF,加入;

3,图(c),图(d),按照大小排序,一次找到BE,CF加入;

4,图(e),因为有三个边的长度都为5,但是由图可知,当AD或者CD加入时,都会产生回路,而BC正好合适,所以BC加入

二,实现方法

第一步:构造邻接矩阵,只不过这保存方法与前面不同.

              只需要构造一个能够保存每条边起点Head终点Tail和权值lowcost的结构体数组。

第二步:将上面构造的结构体数组进行从小到大排序。

              本文代码运用的是归并排序https://blog.csdn.net/qq_46423166/article/details/105493704

              也可以用冒泡排序,插入排序,选择排序,快速排序都等可以,可以看以往博客。

              但是这里注意交换值的时候一次要交换结构体里面的所有值。我这里一次就要交换Head,Tailm,lowcast三个的值

             eg:      S1[k].lowcost = S[i].lowcost;
                           S1[k].Head = S[i].Head;
                           S1[k].Tail = S[i].Tail;(将S[i]的值赋给S1[k])

第三步:进行克鲁斯卡尔算法

               即再将上面排序好的结构体数组进行遍历,符合要求即输出。

              此时需要判断的就是加入某一边,是否会产生环,所以加入一个新

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大学生毕设

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值