uva10034Freckles - prime最小生成树

一个换行符的问题wr十几次 - -

各种debug诶

 

 

 

#include<stdio.h>
#include<math.h>


#define INF 1000000000

struct point
{
	double x,y;
} P[105];

double D(point a,point b)
{
	return sqrt((b.y-a.y)*(b.y-a.y)+(b.x-a.x)*(b.x-a.x));
}

double mp[105][105];


int main()
{
	int T,n,i,j,k;
	double X,Y,dist,min,answer;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		for(i=1;i<=n;i++)
			for(j=1;j<=n;j++)
				mp[i][j]=INF;
		
		for(i=1;i<=n;i++)
		{
			scanf("%lf%lf",&P[i].x,&P[i].y);
			for(j=1;j<=i;j++)
			{
				dist=D(P[i],P[j]);
				mp[i][j]=mp[j][i]=dist;
			}
		}
		
	//	for(i=1;i<=n;i++)
	//	{
	//		for(j=1;j<=n;j++)
	//			printf("%.1lf\t",mp[i][j]);
	//		printf("\n");
	//	}
	//	printf("!\n");
	//	system("pause");
		
		for(i=1;i<=n;i++) mp[0][i]=mp[1][i];
		
	//	for(i=1;i<=n;i++) printf("mp[0][%d]=%.1lf\t",i,mp[0][i]);printf("\n");
		
		answer=0;
		
		for(k=i=1;i<=n;i++)
		{
			min=INF;
			for(j=1;j<=n;j++)
			{
			//	printf("mp[0][j]=%.1lf\tmin=%.1lf\t\n",mp[0][j],min);
				if(mp[0][j]!=0&&min>mp[0][j])
				{
					min=mp[0][j];
					k=j;
				}
			}
		//	printf("min=%.1lf k=%d\n",min,k);
			answer+=mp[0][k];
			mp[0][k]=0;
			
			
			for(j=1;j<=n;j++)
				if(mp[0][j]!=0&&mp[0][j]>mp[k][j])
					mp[0][j]=mp[k][j];
		}
	//	for(i=1;i<=n;i++)
	//	{
	//		for(j=1;j<=n;j++)
	//			printf("%.1lf\t",mp[i][j]);
	//		printf("\n");
	//	}
		
		printf("%.2lf\n",answer);
		if(T) printf("\n");	
	}
	
	return 0;
}


 

 

 

你可能感兴趣的:(uva10034Freckles - prime最小生成树)