浅谈最小生成树的算法思路(一)Prim算法

Prim算法是寻找图的最小生成树的关键方法。本文深入解析算法思路,包括从点集初始化、边权最小化到邻接矩阵操作的过程。通过逐步构建点集P,最终形成覆盖所有点的最小生成树。
摘要由CSDN通过智能技术生成

Prim算法是求最小生成树的一种常见算法,简单谈一下笔者自己的理解。

算法思路

  1. 设已经确定的点集为P,初始为空。设还未确定的点集为Q,初始为该图所有点的集合。设已经确定的边为X,初始为空。
  2. 选取任意一点作为起始点,将该点添加到集合P中,并从Q中移除该点。
  3. 从P中找到一个点A,从Q中找到一个点B,使得2点之间的路径AB的权值最小。
  4. 将路径AB添加到X,将Q中的点B添加到集合P中,并从Q中移除该点。
  5. 重复3~4,直至所有点确定路径。

代码思路

  1. 采用邻接矩阵保存图。
  2. 创建一个临时数组lowcost,长度为总点数,用于表示当前时刻集合P与各点的距离。
    例如lowcost[3]=m,3表示下标为3的点,当m为0表示该点已经在集合P中,即已经确定;当m为65535,表示该点与集合P暂时没有直接路径可到达;其他值表示该点与P可以直接通过一条连线到达,并且当前最短距离为m。
    需要说明的是,这个数组是会不断变化的,最初,当P中只有一个点A的时候,lowcost表示A到各点的距离,这个时候有些点与点A没有直达路径,此时这些点是为65535的;而程序结束时,该数组的元素的值将都为0,因为所有点已经都添加到P了,此时各点到P的距离都为0。
  3. 创建临时数组mst,长度为总点数,用于保存步骤2的最短距离m对应的边关系。即每次添加一个点到P后,会更新P与剩余各点之间的最短距离m,此时会记录最短距离的边AB的起始点和结束点。
    例如lowcost[3]=m,mst[3]=2表示下标为3的点A到P的距离为m,该连线是A与P中下标为2的点B的连线。
  4. 初始化:选取图的点集合的下标为0的点A,作为初始点。将图的边矩阵中,A与各点的距离(权重)写入lostcost数组作为初始值,并将mst各元素置零。创建临时变量n=1,表示已经确定的点数,用作循环结束的判断。
  5. 遍历lowcost数组,找出最小的值(排除0和65535),即当前集合P中任意一点到Q中任意一点的最短距离(权重)。记录下标minid。
  6. 将lowcost[minid]置为零,表示该点已经添加到P。
  7. 更新新添加到P的点minid与Q中各点的距离。即遍历图的边矩阵中起始点为minid的各元素,如果有比lowcost中对应元素的距离小的元素,则更新lostcost,同时更新mst。
    例如,此时P中有3个点{A,B,C},Q中有2个点{D,E},C为刚刚添加的点。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值