• 「洛谷P1433」吃奶酪


    链接:洛谷P1433

    题目描述

    房间里放着n块奶酪。一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处。

    输入格式:

    第一行一个数n (n<=15)

    接下来每行2个实数,表示第i块奶酪的坐标。

    两点之间的距离公式=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))

    输出格式:

    一个数,表示要跑的最少距离,保留2位小数。

    这是一道搜索难题

    直接搜索即可

    就不多说了(因为我太弱了)

    #include<bits/stdc++.h>
    #define prf printf
    #define scf scanf
    using namespace std;
    int n;
    double b[20],a[20],vis[20],ans=999999.9;
    void Dfs(int k,double p,double x,double y)
    {
        if(k==n)//走完所有店 
        {
            ans=min(ans,p);//更新答案 
            return;//返回 
        }
        for(int i=1;i<=n;i++)
        {
            if(!vis[i]&&ans>p)//如果未被用过且当前路径小于最小路径(剪枝) 
            {
                vis[i]=1;//记录被用过 
                Dfs(k+1,p+sqrt((a[i]-x)*(a[i]-x)+(b[i]-y)*(b[i]-y)),a[i],b[i]);//搜索下一层 
                vis[i]=0;//回溯 ,将标记的点取消标记 
            }
        }
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%lf%lf",&a[i],&b[i]);//输入 
        Dfs(0,0.0,0,0);//搜索 
        printf("%.2lf
    ",ans);//输出,保留两位 
        return 0;   
    }
  • 相关阅读:
    关于Java的i++和++i的区别
    Java基础(八 前面补充)
    Java基础(七)
    Java基础(六)
    Java基础(五)
    Java基础(四)
    Java基础(三)
    Java基础(二)
    Java基础
    阿里技术专员《并发编程技术分享》
  • 原文地址:https://www.cnblogs.com/yueyuweihu/p/11493832.html
Copyright © 2020-2023  润新知