最小生成树问题

Prim算法以点的角度来解决问题;Kruskal算法以边的角度来解决问题。Prim算法适合解决边数较多的情况,Kruskal算法适合解决边数较少的情况。

Prim算法

dist[v]表示一个顶点v到这棵生成树的最小距离,这和Dijkstra算法的思想相同。

Prim算法的具体内容以及和Dijkstra算法的区别:

  1. Prim算法不能处理有向图,而Dijkstra可以处理
  2. DijKstra算法和Prim算法的主要区别在于path[v]数组的记录机制。如下:
    (1).初始化时,Dijkstra算法的path数组只有起点初始化为0,其余都初始化为正无穷;Prim的path都初始化为正无穷。
    (2).在顶点在未被收录前,Dijkstra算法的path[v]记录从一个出发点开始记录,记录的实际上是v的父节点到出发点的最短距离+v节点到父节点所在的图的最短距离;而Prim随便从一个节点开始记录,记录的实际上是v节点到父节点所在的图的最短距离
    (3).如果该顶点被收录之后,Dijkstra需要一个专门的收录数组collected来记录已收录状态,同时更新dist[v]为起始点距离当前顶点v的最短路径长度;而Prim的path[v]数组可以直接置0(path[v]=0)表示该顶点处于已收录状态,因为收录后的path不需要记录任何东西了,所以可以用来替代collected功能。
  3. 同时在path[v]和parent[v]的更新上,Prim每次更新都是选择离整个图最近的点更新(dist[v]+E<v,w> < dist[w]),而Dijkstra每次更新都是选择离出发点更近的点更新(E<v,w> < dist[w])。
  4. Prim利用并查集的树存储记录方式来记录,首先初始化parent[]全部为-1,最后parent为-1的节点就是根节点。同时,Prim算法的dist设置为0代表当前节点已收录

Prim算法的代码模板如下:
在这里插入图片描述

Kruskal算法

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值