首页 > ACM题库 > HDU-杭电 > HDU 1233 还是畅通工程-最小生成树-[解题报告] C++
2013
12-04

HDU 1233 还是畅通工程-最小生成树-[解题报告] C++

还是畅通工程

问题描述 :

某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。

输入:

测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。

输出:

对每个测试用例,在1行里输出最小的公路总长度。

样例输入:

3
1 2 1
1 3 2
2 3 4
4
1 2 1
1 3 4
1 4 1
2 3 3
2 4 2
3 4 5
0

样例输出:

3
5

Hint
Hint
Huge input, scanf is recommended.

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1233

/************************************************************************/
/*     
        hdu  还是畅通工程
        最小生成树
        题目大意:求连通这些村庄最少的建设公路长度
        解题思路:最小生成树,所有的这些村子放在一个图中,找出一个最小生成树
*/
/************************************************************************/

#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,len,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",&x,&y,&len);
            map[x][y] = map[y][x] = len;
        }
        memset(mark,0,sizeof(mark));
        printf("%d\n",prim());
    }
    return 0;
}

 


  1. Good task for the group. Hold it up for every yeara??s winner. This is a excellent oppotunity for a lot more enhancement. Indeed, obtaining far better and much better is constantly the crucial. Just like my pal suggests on the truth about ab muscles, he just keeps obtaining much better.

  2. 算法是程序的灵魂,算法分简单和复杂,如果不搞大数据类,程序员了解一下简单点的算法也是可以的,但是会算法的一定要会编程才行,程序员不一定要会算法,利于自己项目需要的可以简单了解。