随笔 - 531  文章 - 0  评论 - 3  阅读 - 10215 

直角坐标系中,有 nn 个点。要求先从左往右走,再从右往左走,不重复的经过每一个点。

求出最短路径(距离为两点间直线距离)。

 

f [i ][j ] 表示点 1~max(i,j) 已走过,的路径长度

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iomanip>
using namespace std;
 const int N =1004;
 
 int n;
 int x[N],y[N];
 double f[N][N];
 
 double d(int i,int j){
    return sqrt((x[i]-x[j])*(x[i]-x[j])+
    (y[i]-y[j])*(y[i]-y[j]));
 
 void solve(){
    int i,j;
    memset(f,0,sizeof f);
    for(i=1;i<=n;i++)
        scanf("%d %d",&x[i],&y[i]);     
       
        for(i=1;i<n-1;i++)
            f[n-1][i] =d(n-1,n)+d(i,n);
         
        for(i=n-2;i>=1;i--){
            for(j=i-1;j>=1;j--){
                f[i][j]=min(f[i+1][j]+d(i,i+1),
                f[i+1][i]+d(j,i+1));
            }
        }
       
    printf("%.2lf\n",f[2][1]+d(2,1));
 }
 signed main(){
    while(scanf("%d",&n)==1) solve();
 }

 

posted on   towboat  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示