- 旅行商简化版
- 2015-04-20 19:42:48 @
求解,为什么我的代码有时候全对,有时候全错
#include<iostream>
#include<math.h>
#include<stdio.h>
//#include<fstream>
using namespace std;
//ifstream fin("cin.in");
int n;
double f[1001][1001];
double d[1001][1001];
double x[1001],y[1001];
void Qsort(int left,int right){
if(left>=right) return ;
int i=left,j=right;double mid=x[(left+right)>>1];
while(i<=j)
{
while(x[i]<mid) i++;
while(x[j]>mid) j--;
if(i<=j)
{
swap(x[i],x[j]);
swap(y[i],y[j]);
i++;j--;
}
}
Qsort(left,j);
Qsort(i,right);
}
int main()
{
cin>>n;
for(int i=1;i<=n;++i)
cin>>x[i]>>y[i];
Qsort(1,n);
for(int i=1;i<=n;++i)
for(int j=i+1;j<=n;++j)
d[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
f[i][j]=1e24;
f[2][1]=d[1][2];
for(int i=3;i<=n;++i)
for(int j=1;j<i;++j)
if(j+1<i) f[i][j]=f[i-1][j]+d[i-1][i];
else
{
for(int k=1;k<j;++k)
f[i][j]=min(f[i][j],f[j][k]+d[k][i]);
}
printf("%.2lf\n",f[n][n-1]+d[n-1][n]);
return 0;
}
1 条评论
-
xinhanggao LV 6 @ 2015-04-21 16:13:06
求解释
- 1