zoukankan      html  css  js  c++  java
  • 1433 吃奶酪

    难度:普及-

    题目类型:DFS

    提交次数:5

    涉及知识:DFS

    题目描述

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

    输入输出格式

    输入格式:

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

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

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

    输出格式:

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

    代码:

     1 #include<iostream>
     2 #include<cmath>
     3 #include<cstdio>
     4 using namespace std;
     5 int n;
     6 double pos[16][2];
     7 double dis[16][16];
     8 bool visited[16];
     9 double total;
    10 double ans = 100001;
    11 void dfs(int num, int step){
    12     if(step == n){
    13         ans = min(total, ans);
    14         return;
    15     } 
    16     if(total>=ans) return;
    17     for(int i = 1; i <= n; i++){
    18         if(!visited[i]){
    19             visited[i] = true;
    20             total += dis[num][i];
    21             dfs(i, step+1);
    22             visited[i] = false;
    23             total -= dis[num][i];
    24         }
    25     }
    26 }
    27 int main(){
    28     cin>>n;
    29     int i, j;
    30     for(i = 1; i <= n; i++){
    31         cin>>pos[i][0]>>pos[i][1];
    32     }
    33     for(i = 0; i <= n; i++)
    34         for(j = 0; j <= n; j++)
    35             dis[i][j] = sqrt((pos[i][0]-pos[j][0])*(pos[i][0]-pos[j][0])+(pos[i][1]-pos[j][1])*(pos[i][1]-pos[j][1]));
    36     dfs(0, 0);
    37     printf("%.2f", ans);
    38     return 0;
    39 }

    备注

    赤裸裸的DFS水题!!可我没认真审题,没注意是从(0,0)出发,活生生写了一遍kruskal!!!!讨论误导啊!!不过就当复习了!

    可我为什么交了5遍呢?double和float又坑我啊!改完以后还不对?坐标是实数啊!不是整数啊!所以这里面所有的数都是double!

    这道题让我领悟到审题的重要性。微笑。

  • 相关阅读:
    数据操作-apply函数族
    11.盛水最多的容器
    canvas绘图
    Nodejs事件监听模块
    http性能测试
    源码解读
    nodejs的一些概念
    http知识补充
    querystring处理参数小利器
    url网址解析的好帮手
  • 原文地址:https://www.cnblogs.com/fangziyuan/p/5936361.html
Copyright © 2011-2022 走看看