UVa 1001 奶酪里的老鼠(Dijkstra或Floyd)

Posted 谦谦君子,陌上其华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa 1001 奶酪里的老鼠(Dijkstra或Floyd)相关的知识,希望对你有一定的参考价值。

https://vjudge.net/problem/UVA-1001

题意:
一个奶酪里有n个洞,老鼠在奶酪里的移动速度为10秒一个单位,但是在洞里可以瞬间移动。计算出老鼠从A点到达O点所需的最短时间。

 

思路:
最短路问题。

我们可以把起点和终点也看成是两个洞,半径为0。这样每个洞就代表了一个点,对于两个洞而言,圆心距离大于两半径之和,此时它们之间的距离就为圆心距离-两半径之和,否则就为0。

我们在计算出任意两个洞之间的距离之后,就可以套用最短路代码来解题了。下面的代码我是用了Floyd算法。

 1 #include<iostream> 
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cmath>
 5 using namespace std;
 6 
 7 const int INF = 1000000;
 8 
 9 int n;
10 double d[105][105];
11 int x[105], y[105], z[105], r[105];
12 
13 void Floyd()
14 {
15     for (int k = 1; k <= n+2;k++)
16     for (int i = 1; i <= n+2;i++)
17     for (int j = 1; j <= n+2; j++)
18         d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
19 }
20 
21 int main()
22 {
23     //freopen("D:\\txt.txt", "r", stdin);
24     int kase = 0;
25     while (cin>>n && n!=-1)
26     {
27         for (int i = 1; i <= n + 2;i++)
28         for (int j = 1; j <= n + 2;j++)
29         if (i == j)  d[i][j] = 0;
30         else d[i][j] = INF;
31 
32         for (int i = 1; i <= n; i++)
33             cin >> x[i] >> y[i] >> z[i] >> r[i];
34         for (int i = n + 1; i <= n + 2; i++)
35         {
36             cin >> x[i] >> y[i] >> z[i];
37             r[i] = 0;
38         }
39 
40         for (int i = 1; i <= n + 2;i++)
41         for (int j = 1; j <= n + 2; j++)
42         {
43             if (i == j)  continue;
44             double dis = sqrt((x[j] - x[i])*(x[j] - x[i]) + (y[j] - y[i])*(y[j] - y[i]) + (z[j] - z[i])*(z[j] - z[i]));
45             dis = dis - r[j] - r[i];
46             if (dis < 0)  dis = 0;
47             d[i][j] = dis;
48         }
49         Floyd();
50         printf("Cheese %d: Travel time = %.f sec\n", ++kase, 10 * d[n+1][n+2]);
51     }
52 }

 

以上是关于UVa 1001 奶酪里的老鼠(Dijkstra或Floyd)的主要内容,如果未能解决你的问题,请参考以下文章

UVA1001 Say Cheese(Dijkstra或Floyd)

UVa1001 Say Cheese (最短路,Dijkstra)

UVa 1001 Say Cheese (Dijkstra)

Cheese Aizu - 0558 (bfs)

[ZJOI2010]贪吃的老鼠(网络流+建图)

2611. 老鼠和奶酪