Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

贴一下AC代码 313ms

Posted by 15211160230 at 2016-08-24 16:10:23 on Problem 2728
看了网上的思路,自己独自去写的。
#include <stdio.h>
#include <math.h>
#define MAXN 1001
#define To2(x)	(x)*(x)
const double eps=1e-4;
typedef struct
{	int x,y,height;
}Point;
typedef struct
{	double distance,cost,weight;
}Graph;
Point vex[MAXN];
Graph G[MAXN][MAXN],dis[MAXN];
int vexnum,visited[MAXN];
double fach(int i,int j)
{
	return sqrt((double)(To2(vex[i].x-vex[j].x)+To2(vex[i].y-vex[j].y)));
}
void Initial(int N)
{	int i,j;
	vexnum=N;
	for(i=1;i<=N;++i)
	{	for(j=1;j<=i;++j)
		{	G[i][j].cost=G[j][i].cost=fabs((double)vex[i].height-vex[j].height);
			G[i][j].distance=G[j][i].distance=fach(i,j);
		}	
	}
}
int FindMin()
{	int i,k=-1;
	double min=1000000;
	for(i=1;i<=vexnum;++i)
		if(!visited[i]&&dis[i].weight<min)
			k=i,min=dis[i].weight;
	return k;
}
double Prim(int k,double rate)
{	int i,j;
	double Dissum=0,Costsum=0;
	for(i=1;i<=vexnum;++i)
		for(j=1;j<=i;++j)
			G[i][j].weight=G[j][i].weight=(double)G[i][j].cost-rate*G[i][j].distance;
	for(i=1;i<=vexnum;++i)
		dis[i]=G[k][i],visited[i]=0;
	dis[k].weight=0,visited[k]=1;
	for(i=1;i<vexnum;++i)	
	{	k=FindMin();
		if(k==-1)	break;
		visited[k]=1;
		Dissum+=dis[k].distance;
		Costsum+=dis[k].cost;
		for(j=1;j<=vexnum;++j)
		{	if(!visited[j]&&dis[j].weight>G[k][j].weight)
			{	dis[j].cost=G[k][j].cost;
				dis[j].distance=G[k][j].distance;
				dis[j].weight=G[k][j].weight;
			}
		}
	}
	return (double)Costsum/Dissum;
} 
int main()
{	int N,i;
	int a,b,c;
	double rate,rateNex;
	while(scanf("%d",&N)&&N!=0) 
	{	for(i=1;i<=N;++i)
			scanf("%d %d %d",&vex[i].x,&vex[i].y,&vex[i].height);
		Initial(N);
		rate=0;
		while(1)
		{	rateNex=Prim(1,rate);
			if(fabs((double)rate-rateNex)<eps)	break;
			rate=rateNex;
		}
		printf("%.3lf\n",rateNex);
	}
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator