最小生成树kruskal算法

来源:互联网 发布:java switch 类型 编辑:程序博客网 时间:2024/05/16 06:48
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;int par[100], n, m;struct edge{    int x, y;    int val;}pp[10000];bool cmp(edge a, edge b){    return a.val < b.val;}int find(int ss){    if(ss == par[ss])        return ss;    return par[ss] = find(par[ss]);}int main(){    int i, j;    while(scanf("%d", &n)!=EOF){        if(n == 0)            break;        for(i = 1; i <= n; i++)            par[i] = i;        for(i = 1; i <= n*(n-1)/2; i++)            scanf("%d%d%d", &pp[i].x, &pp[i].y, &pp[i].val);        sort(pp+1, pp+1+n*(n-1)/2, cmp);        int ans = 0;        for(i = 1; i <= n*(n-1)/2; i++){            int xx = find(pp[i].x);            int yy = find(pp[i].y);            if(xx != yy){                par[xx] = yy;                ans += pp[i].val;            }        }        printf("%d\n", ans);    }    return 0;}

0 0
原创粉丝点击