首页 > 其他 > 详细

洛谷 P1433 吃奶酪

时间:2017-11-26 20:10:01      阅读:302      评论:0      收藏:0      [点我收藏+]

题目描述

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

输入输出格式

输入格式:

 

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

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

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

 

输出格式:

 

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

 

输入输出样例

输入样例#1: 复制
4
1 1
1 -1
-1 1
-1 -1
输出样例#1: 复制
7.41
思路:搜索。
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n;
double ans=0x7f7f7f7f;
struct nond{
    double x,y;
}cnt[16];
int vis[16];
double dis[16][16];
void dfs(int tot,double sum,int pre){
    if(sum>ans)    return ; 
    if(tot==n){
        ans=min(ans,sum);
        return ;
    }
    for(int i=1;i<=n;i++)
        if(!vis[i]){
            vis[i]=1;
            dfs(tot+1,sum+dis[pre][i],i);
            vis[i]=0;
        }
} 
int main(){
    scanf("%d",&n);
    cnt[0].x=0;cnt[0].y=0;
    for(int i=1;i<=n;i++)
        scanf("%lf%lf",&cnt[i].x,&cnt[i].y);
    for(int i=0;i<=n;i++)
        for(int j=i;j<=n;j++)
            dis[i][j]=dis[j][i]=sqrt((cnt[i].x-cnt[j].x)*(cnt[i].x-cnt[j].x)+(cnt[i].y-cnt[j].y)*(cnt[i].y-cnt[j].y));
    vis[0]=1;
    dfs(0,0,0);
    printf("%.2lf",ans); 
}

 

 

洛谷 P1433 吃奶酪

原文:http://www.cnblogs.com/cangT-Tlan/p/7899897.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!