题目:http://acm.hdu.edu.cn/showproblem.php?pid=1879
/************************************************************************/ /* hdu 继续畅通工程 最小生成树 题目大意:求连通这些村庄最少的建设公路费用 解题思路:最小生成树,有的路已修建完成,费用记为0, 计算剩下的这些村子建设路的费用最小值,找出一个最小生成树 */ /************************************************************************/ #include <stdio.h> #include <string.h> #include <algorithm> const int N = 101; int map[N][N]; int mark[N]; int i,j,n; int prim() { int sum = 0; int min,t = n,k; while(--t) { min = 100000; for (i = 2; i <= n; i++) { if(mark[i] != 1 && min > map[1][i]) { min = map[1][i]; k = i; } } sum += min; mark[k] = 1; for (i = 2; i <= n; i++) { if(mark[i] != 1 && map[k][i] < map[1][i]) map[1][i] = map[k][i]; } } return sum; } int main() { int x,y,fee,flag,num; while(scanf("%d",&n) && n != 0) { num = n*(n-1)/2; memset(map,0,sizeof(map)); for (i = 1; i <= num; i++) { scanf("%d%d%d%d",&x,&y,&fee,&flag); if(flag == 1)map[x][y] = map[y][x] = 0; else map[x][y] = map[y][x] = fee; } memset(mark,0,sizeof(mark)); printf("%d\n",prim()); } return 0; }
本文转自NewPanderKing51CTO博客,原文链接:http://www.cnblogs.com/newpanderking/p/3249620.html ,如需转载请自行联系原作者