首页 > 其他 > 详细

搜索与图论_最小生成树

时间:2020-06-28 16:54:57      阅读:60      评论:0      收藏:0      [点我收藏+]

最小生成树

技术分享图片

prim算法

代码模板

int prim() {
    int ans = 0;
    memset(d, 0x3f, sizeof d);
    for(int i = 0; i < n; i++) {
        int t = -1;
        for(int j = 1; j <= n; j++) {
            if(!st[j] && (t == -1 || d[t] > d[j])) t = j;
        }
        if(i && d[t] == INF) return INF;
        if(i) ans += d[t];
        st[t] = true;
        for(int j = 1; j <= n; j++) {
            d[j] = min(d[j], g[t][j]);
        }
    }
    return ans;
}

Kruskal算法

代码模板

struct edge {
    int a, b, w;
    bool operator < (const edge & T) const {
        return w < T.w;
    }
}edges[M];

int getfa(int x) {
    return fa[x] = (fa[x] == x) ? x : getfa(fa[x]);
}

int kruskal() {
    sort(edges, edges + m);
    int ans = 0, cnt = 0;
    for(int i = 0; i < m; i++) {
        int a = edges[i].a, b =  edges[i].b, c = edges[i].w;
        a = getfa(a), b = getfa(b);
        if(a != b) {
            fa[a] = b;
            cnt++;
            ans += c;
        }
    }
    if(cnt < n - 1) return INF;
    return ans;
}

搜索与图论_最小生成树

原文:https://www.cnblogs.com/Hot-machine/p/13203608.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!