HDU 1233---最小生成树问题

解法一  prim算法解决

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 101
#define MAX 1000000
int map[M][M],v[M];

int main()
{
	int n,m,x,y,z,flag;
	while(scanf("%d",&n) && n)
	{
	int total=0;
 memset(v,0,sizeof(v));
	memset(map,MAX,sizeof(map));
	m=n*(n-1)/2;
	for(int i=0;i<m;i++) //对m个输入进行处理
{
scanf("%d%d%d",&x,&y,&z);
	map[x-1][y-1]=map[y-1][x-1]=z;
	}
	v[0]=1;
	for(int i=1;i<n;i++)
	{
	int Min=MAX;
	for(int j=0;j<n;j++)
	{
 if(!v[j]&&map[0][j]<Min)
	{
	Min=map[0][j];
	flag=j;
	}
	}
	total+=Min;
	v[flag]=1; //做标记,将该点加入集合
for(int j=0;j<n;j++)
	{
	if(!v[j]&&map[0][j]>map[flag][j])
	map[0][j]=map[flag][j]; //始终以map[0]记录当前最优节点的值
}
	}
printf("%d\n",total);
	}
	return 0;
}

 

 

 

解法二   并查集解决----Kurl

 

posted @ 2014-04-23 18:48  zhoudan  阅读(91)  评论(0)    收藏  举报