克鲁斯卡尔算法c语言,最小生成树-克鲁斯卡尔(Kruskal)算法

本文介绍了克鲁斯卡尔算法的基本原理和在寻找最小生成树中的应用。主要内容包括算法步骤、如何处理边的排序和避免形成回路的问题,以及提供了C语言的代码实现示例。
摘要由CSDN通过智能技术生成

1. 克鲁斯卡尔算法简介

克鲁斯卡尔算法是一种用来寻找最小生成树的算法(用来求加权连通图的最小生成树的算法)。在剩下的所有未选取的边中,找最小边,如果和已选取的边构成回路,则放弃,选取次小边。

而具体的操作过程为:

a) 将图的所有连接线去掉,只剩顶点

b) 从图的边集数组中找到权值最小的边,将边的两个顶点连接起来

c)  继续寻找权值最小的边,将两个顶点之间连接起来,如果选择的边使得最小生成树出现了环路,则放弃该边,选择权值次小的边

d) 直到所有的顶点都被连接在一起并且没有环路,最小生成树就生成了。

2. 两个核心问题

问题一 对图的所有边按照权值大小进行排序。

问题二 将边添加到最小生成树中时,怎么样判断是否形成了回路。

问题一直接采用排序算法进行排序即可。

问题二的核心思想是记录处理,处理方式是:记录顶点在"最小生成树"中的终点,顶点的终点是"在最小生成树中与它连通的最大顶点"。然后每次需要将一条边添加到最小生存树时,判断该边的两个顶点的终点是否重合,重合的话则会构成回路。

3. 代码实现

依旧是仅供参考#include

#define MAXEDGE 100

#define MAXVERTEX 100

typedef struct Edge {

int begin;//边的起点

int end;  //边的终点

int wight;//边的权值

} Edge;

typedef struct Graph { <

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值