Prim算法和Kruskal算法求最小生成树

Prim算法

连通分量是指图的一个子图,子图中任意两个顶点之间都是可达的。最小生成树是连通图的一个连通分量,且所有边的权值和最小。

最小生成树中,一个顶点最多与两个顶点邻接;若连通图有n个顶点,则最小生成树中一定有n-1条边。

Prim算法需要两个线性表来进行辅助:

  • visited:

标记已经加入生成树的顶点;(它的功能可以由tree取代)

初始状态:生成树根节点为真,其它为0。

  • tree:

记录生成树,tree[x]保存顶点x的直接根节点下标,若x为树的根节点则tree[x]为其自身。

初始状态:根节点为其自身,其它顶点为NULL。

  • low:

low[i]记录生成树中顶点与生成树外顶点i所有边中的最小值。

初始状态:生成树根节点与其它边之间的权值。

Prim算法采用贪心的思想进行设计:

(1) 初始化:将起始点加入生成树中

(2) 在生成树中的顶点与其它顶点之间的边中寻找最小的边加入生成树中(更新visited,tree);

(3) 搜索新加入顶点与所有生成树外顶点i之间边,若小于原有low[i]则更新low[i];

(4) 重复执行,直至生成树中包含了所有顶点。

Prim算法与Dijsktra算法非常类似,两者在执行过程上的显著区别在于:Prim算法按边进行搜索,将

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值