码迷,mamicode.com
首页 > 编程语言 > 详细

Kruskal 算法模板

时间:2018-11-28 23:41:36      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:并查集   合并   端点   const   find   ==   函数   color   初始   

伪代码

对所有边按权值从小到大排序,记录第i小的边为e[i],(1<=i<=m)

初始化MST为空

初始化连通分量,让每个点成为一个独立的连通分量

 for(int i=0;i<m;i++){
        if(e[i].u和e[i].v不在一个连通分量){
            把边e[i]加入MST
            合并e[i].u和e[i].v所在的连通分量
        }
   }

具体代码如下

const int maxn=1e5+5;
int u[maxn],v[maxn],w[maxn],f[maxn],r[maxn];
int n,m;//节点数和边数
//边的端点和权值分别存在u,v,w中
int cmp(const int &i,const int &j) {return w[i]<w[j];} //间接排序函数
int find(int x) {return f[x]==x?x:f[x]=find(f[x]);}//并查集
int Krusal(){
    int ans=0;
    for(int i=0;i<n;i++) f[i]=i;//初始化并查集
    for(int i=0;i<m;i++) r[i]=i;
    sort(r,r+m,cmp);
    for(int i=0;i<m;i++){
        int e=r[i];
        int x=find(u[e]),y=find(v[e]);
        if(x!=y) {
            ans+=w[e];
            f[x]=y;
        }
    }
}

 

                                                                                                                                      

Kruskal 算法模板

标签:并查集   合并   端点   const   find   ==   函数   color   初始   

原文地址:https://www.cnblogs.com/033000-/p/10035407.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!