最小生成树
joy_go
这个作者很懒,什么都没留下…
展开
-
POJ 3625(Building Roads)
#include#include#include#define SIZE 1010#define INF 0xfffffftypedef struct node{ double x,y;};node vertex[1010];double graph[1010][1010];double dis(node a,node b){ return sqrt((a.x-b.x原创 2012-10-27 17:33:34 · 399 阅读 · 0 评论 -
最小生成树(Kruskal)
Kruskal思路:将所有边按从小到大排序,依次选边,若加入该边不构成回路,就将该边加入最小树中;需要用到并查集。#include #include #include struct node{ int u, v, w; };const int SIZE = 1000;node edge[SIZE];int graph[SIZE][SIZE], check[SIZ原创 2012-10-17 14:23:44 · 432 阅读 · 0 评论 -
最小生成树(Prim)
思路(贪心):从单一顶点开始,普里姆算法按照以下步骤逐步扩大树中所含顶点的数目,直到遍及连通图的所有顶点。输入:一个加权连通图,其中顶点集合为V,边集合为E; 初始化:Vnew = {x},其中x为集合V中的任一节点(起始点),Enew = {}; 重复下列操作,直到Vnew = V:在集合E中选取权值最小的边(u, v),其中u为集合Vnew中的元素,而v则不是(如果存在有多条满原创 2012-10-18 14:53:28 · 458 阅读 · 0 评论 -
最小生成树重要的性质及其证明
今天看书的时候终于看懂了一个证明,这个一直是我的薄弱的环节,虽然这个证明比较简单,但能看懂还是挺有用的。性质1:一个无向图G,如果它的的边权都不相同,那么它的最小生成树唯一;证明:假设T1,T2是G的两棵最小生成树,其边集为E(T1) = {e1,e2,...,en-1}且按边权值从小到大排序(ei >= ei-1),E(T2) = {f1,f2,...fn-1}且按边权值从小到大原创 2013-10-11 19:35:32 · 4896 阅读 · 3 评论