题意:一只母老鼠想要找到她的公老鼠玩具(cqww?),而玩具就丢在一个广阔的3维空间(其实可以想象成平面)上某个点,而母老鼠在另一个点,她可以直接走到达玩具的位置,但是耗时是所走过的欧几里得距离*10s。还有一种方法,就是靠钻洞,洞是球的,而在洞内怎么走都是不耗时间的。求母老鼠找到她的玩具所耗时?

思路:先要看清楚题意先!尽可能要找到洞,如果洞的半径越大,那么就可以越省时。如果老鼠和玩具都在同个洞上,那么不耗时即可找到。

  其实就是求单源最短路,只是计算两点间的长度时要考虑到半径的。而且得注意两洞相连的情况,那么在两洞之间切换不需要时间。输出注意要用round(double)。

下面是dijkstra实现,比较快:

 1 #include <bits/stdc++.h>
 2 #define LL long long
 3 #define pii pair<int,int>
 4 #define pdi pair<double,int>
 5 #define INF 0x7f7f7f7f
 6 using namespace std;
 7 const int N=110;
 8 int x[N], y[N], z[N], r[N];
 9 double dist[N][N];
10 double sdist[N];
11 int vis[N];
12
13 LL dijkstra(int n)
14 {
15     memset(vis,0,sizeof(vis));
16     for(int i=0; i<=n; i++) sdist[i]=1e29;
17     priority_queue<pdi,vector<pdi>,greater<pdi> >   que;
18     que.push(make_pair(0.0, 0));
19     sdist[0]=0.0;
20     while(!que.empty())
21     {
22         int x=que.top().second;que.pop();
23         if(vis[x]) continue;
24         vis[x]=1;
25         for(int i=0; i<=n; i++)
26         {
27             if( sdist[i]>sdist[x]+dist[x][i] )
28             {
29                 sdist[i]=sdist[x]+dist[x][i];
30                 que.push(make_pair(sdist[i],i));
31             }
32         }
33     }
34     return round(sdist[n]*10)+0.5;
35 }
36
37
38
39 int main()
40 {
41     freopen("input.txt", "r", stdin);
42     int n;
43     int  j=0;
44     while(scanf("%d", &n), n>=0)
45     {
46         memset(r,0,sizeof(r));
47         for(int i=1; i<=n; i++) scanf("%d %d %d %d",&x[i], &y[i], &z[i], &r[i]);
48
49         scanf("%d %d %d",&x[0],&y[0],&z[0]);        //起点
50         scanf("%d %d %d",&x[n+1],&y[n+1],&z[n+1]);  //终点
51
52         //求两两之间的距离
53         for(int i=0; i<=n+1; i++)
54         {
55             for(int j=0; j<=n+1; j++)
56             {
57                 dist[i][j]=0.0;
58                 if(j!=i)
59                 {
60                     dist[i][j]=sqrt( pow(x[i]-x[j],2)+pow(y[i]-y[j],2)+pow(z[i]-z[j],2) )-r[i]-r[j];
61                     if(dist[i][j]<1e-7)  dist[i][j]=0;
62                 }
63             }
64         }
65
66         printf("Cheese %d: Travel time = %lld sec\n", ++j, dijkstra(n+1));
67
68     }
69     return 0;
70 }

AC代码

下面是floyd实现,比较短:

 1 #include <bits/stdc++.h>
 2 #define LL long long
 3 #define pii pair<int,int>
 4 #define INF 0x7f7f7f7f
 5 using namespace std;
 6 const int N=110;
 7 int x[N], y[N], z[N], r[N];
 8 double dist[N][N];
 9
10 int main()
11 {
12     freopen("input.txt", "r", stdin);
13     int n;
14     int  j=0;
15     while(scanf("%d", &n), n>=0)
16     {
17         memset(r,0,sizeof(r));
18         for(int i=1; i<=n; i++) scanf("%d %d %d %d",&x[i], &y[i], &z[i], &r[i]);
19
20         scanf("%d %d %d",&x[0],&y[0],&z[0]);        //起点
21         scanf("%d %d %d",&x[n+1],&y[n+1],&z[n+1]);  //终点
22
23         //求两两之间的距离
24         for(int i=0; i<=n+1; i++)
25         {
26             for(int j=0; j<=n+1; j++)
27             {
28                 dist[i][j]=0.0;
29                 if(j!=i)
30                 {
31                     dist[i][j]=sqrt( pow(x[i]-x[j],2)+pow(y[i]-y[j],2)+pow(z[i]-z[j],2) )-r[i]-r[j];
32                     if(dist[i][j]<1e-7)  dist[i][j]=0;
33                 }
34             }
35         }
36         //floyd
37         for(int k=0; k<=n+1; k++)
38             for(int i=0; i<=n+1; i++)
39                 for(int j=0; j<=n+1; j++)
40                     dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j]);
41         printf("Cheese %d: Travel time = %lld sec\n", ++j, (LL)(round(dist[0][n+1]*10)+0.5) );
42
43     }
44     return 0;
45 }

AC代码

转载于:https://www.cnblogs.com/xcw0754/p/4658569.html

UVA 1001 Say Cheese 奶酪里的老鼠(最短路,floyd)相关推荐

  1. UVA 1001 Say Cheese(最短路)

    题意:阅读题....无限大的奶酪里有n个球形的洞.你的任务是帮助老鼠A用最短时间到达老鼠O的位置.奶酪里面的移动速度为10S一个单位,但是在洞里可以瞬间移动,求最短时间 思路:先耐心看题目...然后就 ...

  2. uva 1001 奶酪里的老鼠(狄杰斯特拉或弗洛伊德)

     题意:在一个三维的奶酪里面有n(n<=100)个洞,老鼠A想到达老鼠B的位置, 在洞里面可以瞬间移动,在洞外面的移动速度为10秒一个单位,求最短时间 本来不难的一道题,因为图论做得少所以不 ...

  3. 记忆化dfs(爱吃奶酪的肥老鼠)

    题目描述 PIPI家里来了一只肥老鼠!!! 它的活动区域在一个n*n的方格矩阵中,其中每个方格上都一些奶酪,肥老鼠很懒,当它在一个方格吃完奶酪的时候,他最多往上下左右其中一个方向直走k步去找下一块奶酪 ...

  4. 岸上的猫和水里的老鼠

    这是我在2007年7月9日发在魔方吧论坛的一道智力题.从小一直很热衷于思考各种有趣的题目,这道题则是我根据一个很简单的猫和老鼠的题目扩展出来的. =========================== ...

  5. 对偶图 【BZOJ】1001: [BeiJing2006]狼抓兔子(对偶图+最短路)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1001 可谓惨不忍睹,一下午就在调这题了. 很久以前看到这题是一眼最大流,看到n<=1000,我 ...

  6. Uva(10048),最短路Floyd

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  7. FZU2261 浪里个浪(最短路,spfa)(福州大学第十四届程序设计竞赛)

    题目:  Problem 2261 浪里个浪 Accept: 42    Submit: 108 Time Limit: 1500 mSec    Memory Limit : 32768 KB  P ...

  8. 为什么《剑桥中国史》系列没有魏晋南北朝史和两宋史?

    根据剑桥大学出版社网站,<剑桥中国史>系列中: 第2卷 <剑桥中国魏晋南北朝史>尚未出版 第5卷 <剑桥中国五代宋朝史上>英文版已经出版,中文版尚未出版 第6卷 & ...

  9. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

最新文章

  1. C++构造函数及析构函数的调用顺序
  2. mysql sleep 5908_mysql连接卡死,很多线程sleep状态,导致CPU中mysqld占用率极高(问题原因还待考证)...
  3. PE文件感染和内存驻留
  4. Linux基础学习五:软件的相关安装(JDK,Tomcat,Yum)
  5. request对象作为:作用域
  6. front mysql 导出表结构_肿么将mysql的表结构导出到sqlserver中
  7. string replace_面试必问:String类型为什么设计成不可变的?
  8. oracle中的hint是什么,SQL优化过程中常见Oracle中HINT的30个用法
  9. sqlserver 迁移
  10. 在MAC上.sh command not found?
  11. QQ浏览器+7654联盟
  12. “打酱油”的意思:不关我的事,我只…
  13. 程序员小灰2021年整理
  14. python 机器学习(引言-莺尾花分类)
  15. 查询至少具有两份工作员工的姓名和其公司名
  16. 阿里云云服务器ECS介绍
  17. 火山引擎云原生大数据在金融行业的实践
  18. jhipster快速入门指南
  19. 区块链信息安全(区块链信息安全关键技术研究)
  20. 设计模式回顾——适配器模式(C++)

热门文章

  1. 设置IE首页与新建页面内容
  2. python短期速成班_许昌市北大青鸟accp课程
  3. 一个基于JDBC的通用DAO的设计参考(北大青鸟课程)
  4. pdf.js批注_使用反射处理Java批注
  5. apktool d --no-res douyin.apk -o out1
  6. 无线网服务器mac是什么原因,为何mac连上wifi却上不了网
  7. html表单选择城市,基于weui的城市选择器(city-picker)
  8. Linux基础入门--进程间通信--共享内存
  9. XCode打包静态库文件
  10. android:报Activity has leaked IntentReceiver或者receiver is not registered错误