您的位置:首页 > 其它

hdu-1233-还是畅通工程

2014-03-08 21:08 405 查看
#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#define M 1000000

int map[105][105];

int prim(int n)//普里姆算法

{

    int min,i,j,k,sum=0;

    int used[105]={0},dis[105]={0};

    for(i=1;i<=n;i++)

    dis[i]=map[i][1];//与顶点 1 相连的顶点

    for(i=2;i<=n;i++)

    {

        min=M;

        for(j=2;j<=n;j++)

        if(min>dis[j]&&used[j]==0)

        {

            min=dis[j];

            k=j;

        }

        sum+=min;

        used[k]=1;

        for(j=1;j<=n;j++)

        if(used[j]==0&&dis[j]>map[k][j])

        {

            dis[j]=map[k][j];

        }

    }

    return sum;

}

int main()

{

    int n,i,j,a,b,c;

    while(scanf("%d",&n)&&n)

    {

        for(i=1;i<=n;i++)

        for(j=1;j<=n;j++)

        if(i==j) map[i][j]=0;

        else map[i][j]=M;

        for(i=0;i<n*(n-1)/2;i++)

        {

            scanf("%d%d%d",&a,&b,&c);

            map[a][b]=map[b][a]=c;

        }

        printf("%d\n",prim(n));

    }

    return 0;

}

        
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: