最短路 kruskal模板

来源:互联网 发布:java 继承 编辑:程序博客网 时间:2024/05/21 14:44
#include "stdio.h"  //最短路  Kruskal算法  存边,排序,并查集合并,直至要求的两点相通,输出最小结果 //hdu 1233#include "stdlib.h"struct node{    int x,y;    int w;}line[10005];int ans;int set[10005];int cmp(const void *a,const void *b){    return (*(node *)a).w - (*(node *)b).w;}int find(int x){    if(set[x] == x)        return x;    return find(set[x]);}void Union_t(int x,int y,int w){    int fa = find(x);    int fb = find(y);    if(fa!=fb)    {        ans += w;        set[fa] = fb;    }}int main(){    int n,m;    int i;    while(scanf("%d",&n),n!=0)    {        m = n*(n-1)/2;        for(i=0;i<=n;i++)            set[i] = i;        for(i=0;i<m;i++)        {            scanf("%d %d %d",&line[i].x,&line[i].y,&line[i].w);        }        qsort(line,m,sizeof(line[0]),cmp);        ans = 0;        for(i=0;i<m;i++)        {            Union_t(line[i].x,line[i].y,line[i].w);        }        printf("%d\n",ans);    }    return 0;}

原创粉丝点击