HDU 1233 还是畅通工程

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
const int MAX=100000000;
int map[101][101],min,sum;

int main()
{
	int i,j,n,x,y,m,v[101],flag,dis;
	while(scanf("%d",&n),n)
	{
		map[n][n];
		memset(map,0,sizeof(map));
		m=(n*(n-1))/2;
		for(i=0;i<m;i++)
		{
			scanf("%d%d%d",&x,&y,&dis);
			map[x-1][y-1]=map[y-1][x-1]=dis;
		}
		for(i=0;i<n;i++)
			map[i][i]=MAX;
		v[n];
		memset(v,0,sizeof(v));//用于保存每个结点是否被扩展的信息
		v[0]=1;
		sum=0;
		//prim最小生成树
		for(i=1;i<n;i++)
		{
			min=10000000;
			for(j=0;j<n;j++)
			{
				if(!v[j]&&map[0][j]<min)
				{
					min=map[0][j];
					flag=j;
				}
			}
			sum+=min;
			v[flag]=1;
			for(j=0;j<n;j++)
			{
				if(!v[j]&&map[0][j]>map[flag][j])
				{
					map[0][j]=map[flag][j];
				}
			}
		}
		printf("%d\n",sum);
	}
	return 0;
}

你可能感兴趣的:(ini,扩展)