uva 1347

 
 
????????????????
#include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<iostream> #include<queue> #include<vector> #include<sstream> #include<cmath> #include<queue> #include<cctype> #include<set> #include<unordered_set> using namespace std;
const int maxn = 1000+10; int N; double d[maxn][maxn]; struct point{   double x,y; }p[maxn];
double getdist(int i,int j){    point a = p[i], b = p[j];    return sqrt( double( (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y) ) ); }
int main(){    while(scanf("%d",&N) == 1){       for(int i = 1; i <= N; i++)         scanf("%lf%lf",&p[i].x,&p[i].y);       memset(d,0.0,sizeof(d));       for(int i = N-1; i >= 2; i--)          for(int j = 1; j < i; j++) {             if(i == N-1) d[i][j] = getdist(i,N) + getdist(j,N);             else d[i][j] = min(d[i+1][j]+getdist(i,i+1), d[i+1][i]+getdist(j,i+1));       }       printf("%.2f",d[2][1] + getdist(1,2));    }    return 0; }

猜你喜欢

转载自blog.csdn.net/a874288174/article/details/79994263