【C语言】普里姆算法详解:计算最少成本和路径输出

本文详细介绍了使用C语言实现普里姆算法来找到连通图中的最小生成树,从而计算出各顶点间的最少成本。通过初始化lowcost和vset数组,以及逐步将顶点并入生成树,动态更新边的权值,最终得到成本总和。普里姆算法适用于稠密图,其时间复杂度与图的顶点数成正比。文章附带核心代码和验证算法正确性的数据示例。

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

【应用背景】连通图中各顶点所需要的最少成本。

(1)普里姆算法

1)根据需求构造返回类型,比如求最少成本,则定义返回类型为int型的函数,传入参数为邻接矩阵g,和出发点v0;

2)定义变量:lowcost[]数组(存储图中还未并入树的各顶点到当前生成树最短边的权值),vset[]数组(标记顶点是否被并入生成树中,1为真,0为假),循环变量i,j,整型变量min,k和sum,min表示生成树到剩余顶点最短边中最短的那条边的权值,k表示与这条边相连并将被并入生成树的顶点,sum表示成本总和;

3)做一个循环将lowcost数组初始化为与出发点相邻的各条边的权值,vset初始化为0;

4)将v0标记为1,表示生成树的根结点,接下来将剩余的n-1个顶点并入生成树中,即做n-1次循环:

  • 将min初始化为INF,无穷大。
  • 找出min值和k值。嵌套内循环1:执行n次,依次遍历每一个顶点,如果vset[j]为0,并且lowcost[j]<min,则分别将权值lowcost[j]和顶点编号i赋值给min和k。
  • 计算成本,sum += min,并将k标记为1。
  • 以新并入的顶点k为媒介更新lowcost数组。因为当前生成树发生了变化,剩余顶点到生成树的权值也应发生改变。嵌套内循环2:执行n次,依次遍历每一个顶点,如果vset[i]为0,并且g.edges[k][j] < lowcost[j],表示顶点j未并入生成树,且与顶点k相连的边的权值要小于顶点j到旧的生成树最短边的权值。此时说明必须要更新lowcost[]数组,将该边权值赋值g.edges[k][j] 给lowcost[j]。

5)返回sum,算法结束。

【算法分析】算法嵌套两层循环,外层循环执行n-1次,内层循环1中if语句比较n次,所以算法时间复杂度为

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱吃柚子的梨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值