最小生成树实验报告c语言,C语言实现最小生成树构造算法

最小生成树

最小生成树(minimum spanning tree)是由n个顶点,n-1条边,将一个连通图连接起来,且使权值最小的结构。

最小生成树可以用Prim(普里姆)算法或kruskal(克鲁斯卡尔)算法求出。

我们将以下面的带权连通图为例讲解这两种算法的实现:

ffd4874954f8fad5760114753cd3986a.png

注:由于测试输入数据较多,程序可以采用文件输入

17d5703ba535e1a1bdc13b1f072d7d21.png

Prim(普里姆)算法

时间复杂度:O(N^2)(N为顶点数)

prim算法又称“加点法”,用于边数较多的带权无向连通图

方法:每次找与之连线权值最小的顶点,将该点加入最小生成树集合中

注意:相同权值任选其中一个即可,但是不允许出现闭合回路的情况。

a7b95aad2de1deb1e9ff1d4212ae9911.png

98825e1967b7171079b57166b0c136ab.png

b469475dcbf1210954349e21712bf18c.png

77ed4edc9ec8d568f8f810edd2da1f5e.png

d7987b7ce31f1fc2e11c17ceee082b56.png

a341e64535274292769b2e0e27825bd7.png

98ecb63f8cf423f48baf747bc0fe211a.png

代码部分通过以下步骤可以得到最小生成树:

1.初始化:

lowcost[i]:表示以i为终点的边的最小权值,当lowcost[i]=0表示i点加入了MST。

mst[i]:表示对应lowcost[i]的起点,当mst[i]=0表示起点i加入MST。

由于我们规定最开始的顶点是1,所以lowcost[1]=0,MST[1]=0。即只需要对2~n进行初始化即可。

#define MAX 100

#define MAXCOST 0x7fffffff

int graph[MAX

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值