最小生成树

算法

解决最小生成树问题有Kruskal(克鲁斯卡尔)算法和Prim(普里姆)算法

克鲁斯卡尔算法

先构造一个只含 n 个顶点、而边集为空的子图,把子图中各个顶点看成各棵树上的根结点,之后,从网的边集 E 中选取一条权值最小的边,若该条边的两个顶点分属不同的树,则将其加入子图,即把两棵树合成一棵树,反之,若该条边的两个顶点已落在同一棵树上,则不可取,而应该取下一条权值最小的边再试之。依次类推,直到森林中只有一棵树,也即子图中含有 n-1 条边为止。时间复杂度为为O(e^2), 使用并查集优化后复杂度为 O(eloge),与网中的边数有关,适用于求边稀疏的网的最小生成树。简单地说就是从边的角度考虑,在剩下的所有未选取的边中,找最小边,如果和已选取的边构成回路,则放弃,选取次小边。

普里姆算法

从点的角度考虑,算法描述如下
1).输入:一个加权连通图,其中顶点集合为V,边集合为E;
2).初始化:Vnew = {x},其中x为集合V中的任一节点(起始点),Enew = {},为空;
3).重复下列操作,直到Vnew = V:
a.在集合E中选取权值最小的边<u, v>,其中u为集合Vnew中的元素,而v不在Vnew集合当中,并且v∈V(如果存在有多条满足前述条件即具有相同权值的边,则可任意选取其中之一);
b.将v加入集合Vnew中,将<u, v>边加入集合Enew中;
4).输出:使用集合Vnew和Enew来描述所得到的最小生成树。

题目

HDU1863畅通工程(Kruskal算法求解)     

HDU1233还是畅通工程(Kruskal算法求解)

HDU1879 继续畅通工程(Kruskal算法求解)

HDU1875畅通工程再续(Kruskal算法求解)

HDU4313Matrix(Kruskal算法求解)

51Nod_1212 无向图最小生成树

POJ1789 Truck History【最小生成树】

ZOJ1586 QS Network【最小生成树】

POJ2421 Constructing Roads【最小生成树】

POJ2031 Building a Space Station【最小生成树】

POJ1278 Networking【最小生成树】

POJ1251 Jungle Roads【最小生成树】

POJ1751 Highways【最小生成树】

POJ1258 Agri-Net【最小生成树】

CCF201412-4 最优灌溉

题目38 布线问题(NYOJ)

CCF201812-4 数据中心

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值