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是怎么优化的。

 

源码:

 

 

                  

发布了42 篇原创文章 · 获赞 6 · 访问量 6万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章