最短路 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;}