• UVa 1001 Say Cheese【floyd】


    题意:在一个三维的奶酪里面有n(n<=100)个洞,老鼠A想到达老鼠B的位置,

    在洞里面可以瞬间移动,在洞外面的移动速度为10秒一个单位,求最短时间

    看到n<=100,又是求最短时间,想到用floyd,可是给的是坐标,,还是三维的,

    建不出图来----最后看的题解--------------

    是这一篇--

    http://morris821028.github.io/2014/11/02/oj/uva/uva-1001/

    不懂这种叫不叫离散化,把输入的每个洞编号,

    如果两个洞相交,那么d[i][j]=0

    如果不相交,那么d[i][j]=dist-(r[i]+r[j]),dist为这两个洞圆心之间的欧几里得距离

    再用floyd处理就可以了

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map> 
     8 #include<set>
     9 #include<queue> 
    10 #include<algorithm>  
    11 using namespace std;
    12 
    13 #define foreach(i,c) for (__typeof(c.begin()) i = c.begin(); i != c.end(); ++i)
    14 
    15 typedef long long LL;
    16 const int INF = (1<<30)-1;
    17 const int mod=1000000007;
    18 const int maxn=505;
    19 
    20 int x[maxn],y[maxn],z[maxn],r[maxn];
    21 double d[maxn][maxn];
    22 
    23 int main(){
    24     int n,kase=0;
    25     while(scanf("%d",&n)!=EOF&&n!=-1){
    26         for(int i=1;i<=n+2;i++){
    27             if(i<=n) scanf("%d %d %d %d",&x[i],&y[i],&z[i],&r[i]);
    28             else scanf("%d %d %d",&x[i],&y[i],&z[i]),r[i]=0;
    29         }
    30         
    31         n=n+2;
    32         for(int i=1;i<=n;i++){
    33             for(int j=1;j<=n;j++){
    34                 if(i==j) d[i][j]=0;
    35                 else {
    36                     double dist=sqrt((double )(x[i]-x[j])*(x[i]-x[j])+(double)(y[i]-y[j])*(y[i]-y[j])+(double)(z[i]-z[j])*(z[i]-z[j]));
    37                     if(dist<=r[i]+r[j]) d[i][j]=0;
    38                     else d[i][j]=dist-(r[i]+r[j]);
    39                 }
    40             }
    41         }
    42         
    43         
    44         for(int k=1;k<=n;k++)
    45          for(int i=1;i<=n;i++)
    46           for(int j=1;j<=n;j++)
    47           d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
    48          
    49          printf("Cheese %d: Travel time = %.0lf sec
    ",++kase,d[n-1][n]*10);
    50     }
    51     return 0;    
    52 }
    View Code
  • 相关阅读:
    linux文件操作
    文件和目录维护
    随心而记
    开学了
    基本逻辑门电路原理
    ubuntu搭建ftp服务
    中断
    数码管
    字,寻址和移位
    Error: Could not find or load main class resourcemanager
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4490671.html
Copyright © 2020-2023  润新知