Sicily 1083 Networking

最小生成树

#include <stdio.h>
const int maxl=110;
int main()
{
    int n,r,i,j,k,sum,d,ctr;
    int data[100][100];

    scanf( "%d",&n );
    while ( n!=0 ) {
        for ( i=0;i<=n;i++ )
            for ( j=0;j<=n;j++ )
                data[i][j]=maxl;
        scanf( "%d",&r );
        for ( k=0;k<r;k++ ) {
            scanf( "%d%d%d",&i,&j,&d );
            if ( data[i-1][j-1]>d ) {
                data[i-1][j-1]=d;
                data[j-1][i-1]=d;
            }
        }
        ctr=0;
        sum=0;
        while ( ctr<n-1 ) {
            k=maxl;
            for ( i=1;i<n;i++ ) {
                if ( data[0][i]<k ) {
                    k=data[0][i];
                    j=i;
                }
            }
            sum+=k;
            ctr++;
            for ( i=1;i<n;i++ ) {
                if( data[j][i]<data[0][i] ) 
                    data[0][i]=data[j][i];
                if ( data[i][j]<data[i][0] )
                    data[i][0]=data[i][j];
                data[i][j]=maxl;
                data[j][i]=maxl;
            }
            data[0][j]=maxl;
            
        }
        printf( "%d\n",sum );
        scanf( "%d",&n );
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值