hdu1233

#include<stdio.h>

#include<string.h>

#define N 100+5

#define MAX 9999

int map[N][N];

int d[N];

int n,ans;





void prim(){

	int i,j,k,min;

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

		d[i]=map[1][i];

	ans+=d[1];

	d[1]=0;//进入最小生成树

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

		min=MAX;

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

			if(min>d[j]&&d[j]!=0){

				k=j;

				min=d[j];

			}

		}

		ans+=d[k];

		d[k]=0;//进入最小生成树

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

			if(d[j]>map[k][j]&&d[j]!=0){

				d[j]=map[k][j];

			}

		}

	}

	return ;

}



int main(){

	int i,j,t;

	int t1,t2,val;

	while(scanf("%d",&n)==1,n){

		t=n*(n-1)/2;

		memset(map,MAX,sizeof(map));

		memset(d,MAX,sizeof(d));

		for(i=1;i<=n;i++)map[i][i]=0;



		for(i=0;i<t;i++){

			scanf("%d%d%d",&t1,&t2,&val);

			if(map[t1][t2]>val)

				map[t1][t2]=map[t2][t1]=val;

		}

		

		ans=0;

		prim();

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

	}

	return 0;

}

  简单的prim

我都能一遍AC 。。。oh yeah!

你可能感兴趣的:(HDU)