PKU 1251 最小生成树

背景:

无向连通图G=(V,E)的最小生成树算法:

1.prim算法:

    (1)初始顶点集合S为空,把任意一个顶点s加入集合S.

    (2)迭代|V|-1次,每次加入顶点u,使得v属于S,u不属于S并且(u,v)权值最小, 记录边(u,v)

    (3)所有记录过的边(u,v)即最小生成树

2.kruskal算法:

    (1)把有|E|中边按权值非降排序

    (2)边初始集合S为空,每次加入权值最小的边,当加入后边集合不构成回路,删掉此边。回路判定可以采取并查集方法

    (3)边集合为最小生成树

 

题意:求n个村庄的最小生成树,1<n<27,n个村庄用前n个大写字母表示。输入n和 n-1个顶点与之连通的顶点和权值。输入最小生成树边权值和。边权值小于100,边集合|E|小于等于75,一个顶点连接的边数小于等于15.

分析:prim算法对于处理稠密邻接矩阵有效,而kruskal对于边稀疏矩阵有效。这道题应该kruskal更有效一些。不过两个算法在Judge上运行都是Memory 228K, 时间为0MS,不知道那些Memory<30K是怎么优化的。

 

源码:

 

 

                  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值