图的邻接矩阵存储方式之普里姆prim算法(最小生成树问题)

Prim算法是解决最小生成树问题的一种方法,适用于稠密图。在n个城市间建立通信网络时,通过该算法可以找到成本最低的路径组合。算法主要包括初始化、选取最小路径并更新辅助数组的过程,时间复杂度为O(n^2)。

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

假设在n个城市间建立通信网络,则联通n个城市只需要n-1条线路,这就存在n!种联通网络即生成树,那么这就要考虑怎么建立网络能使路径最短,成本最低或是权重和最小,这个问题就是最小生成树问题(minimum cost spanning tree)。而prim算法是构造最小生成树的方法之一。

为了实现这个算法,需要设置一个辅助数组closedg[i],其中有两个分量,一个存储顶点元素(边的起始点),一个存储权值,本质上,这个数组存储的是已经进入最小生成树的顶点其他顶点最小权重信息,包括边的起始点,例如,closedg[k]=(v1,8),代表生成树中点v1到下标为k的元素的权重最小,且最小权重为8。

代码实现过程:

1,定义数组辅助结构体数组,通过首先放入一个顶点下标为k的顶点,初始化数组,并令close[k]={ (随机数) , 0}

2,选出最小路径下标k顶点,辅助数组中存储的顶点是最小路径边的起始点,终点是k号顶点,同时计算最小代价:

        weightsum = weightsum + closedg[k].weight;             //计算最小代价值

3,更新辅助数组,有了新的顶点加入到生成树中,要保证辅助数组中存储的是到剩余顶点的最小路径。循环执行2和3步n-1次。

具体代码如下:(此代码是建立再邻接表存储结构之

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值