记录编号 342915 评测结果 AAAAAAAAAA
题目名称 线型网络 最终得分 100
用户昵称 GravatarZwoi_只会打表抄代码的蒟蒻 是否通过 通过
代码语言 C 运行时间 0.090 s
提交时间 2016-11-08 20:18:23 内存使用 0.29 MiB
显示代码纯文本
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int k,dis[25];
double n[25][25],x[25],y[25],sum,min;
void swap(int *a,int *b)
{
	int t;
	t=*a;
	*a=*b;
	*b=t;
}
void sv(int a,int b)
{
	int i,j;
	for(i=a,j=b;i<=j;i++,j--)
		swap(&dis[i],&dis[j]);
}
double solve()
{
	int i,a,b,j;
	double t=0;
	for(i=1;i<=100;i++)
	{
		a=rand()%(k)+1;
		b=rand()%(k)+1;
		swap(&dis[a],&dis[b]);
	}
	for(i=1;i<k;i++)
		for(j=i+1;j<=k;j++)
			if(n[dis[i-1]][dis[i]]+n[dis[j]][dis[j+1]]>n[dis[i-1]][dis[j]]+n[dis[i]][dis[j+1]])
				sv(i,j);
	for(i=1;i<k;i++)
		t+=n[dis[i]][dis[i+1]];
	return t;
}
int main()
{
	int i,j;
	double t;
	freopen("linec.in","r",stdin);
	freopen("linec.out","w",stdout);
	scanf("%d",&k);
	for(i=1;i<=k;i++)
	{
		scanf("%lf %lf",&x[i],&y[i]);
		for(j=1;j<i;j++)
			n[j][i]=n[i][j]=sqrt(pow(x[i]-x[j],2)+pow(y[i]-y[j],2));
		n[i][i]=0;
	}
	for(i=1;i<=k;i++)
		dis[i]=i;
	sum=199999999;
	for(i=1;i<=2000;i++)
	{
        t=solve();
        if(t<sum) sum=t;
	}
	printf("%.2lf",sum);
	return 0;
}