如果没有洞,那么任意两点的最短距离就是直线距离,洞里是瞬间的,所以看成一个点就行了(其实点也可以当作半径为0的洞来处理),洞到洞的最短距离都是圆心距离减去半径。剩下的就是求单源最短路径,是完全图,用不加堆优化的dijkstra就行了O(n^2)。

#include<bits/stdc++.h>
using namespace std; typedef long long ll; const int maxn = ; int x[maxn],y[maxn],z[maxn],r[maxn]; double g[maxn][maxn];
inline ll squ(ll x) { return x*x; }
inline double dist(int i,int j) { return sqrt(squ(x[i]-x[j])+squ(y[i]-y[j])+squ(z[i]-z[j]))-r[i]-r[j]; } double d[maxn];
double INF = 1e9;
bool vis[maxn]; double dijkstra(int n,int s = ,int t = )
{
for(int i = ; i < n; i++) d[i] = INF;
memset(vis,,sizeof(bool)*n);
for(int i = ; i < n; i++){
int x; double m = INF;
for(int y = ; y < n; y++) if(!vis[y] && d[y] < m) m = d[x = y];
if(x == t) return d[t];
vis[x] = true;
for(int y = ; y < n; y++) d[y] = min(d[y],d[x]+g[x][y]);
}
return INF;
} int main()
{
//freopen("in.txt","r",stdin);
int n,kas = ;
while(scanf("%d",&n),~n){
n += ;
for(int i = ; i < n; i++) scanf("%d%d%d%d",x+i,y+i,z+i,r+i);
scanf("%d%d%d%d%d%d",x,y,z,x+,y+,z+);
for(int i = ; i < n; i++)
for(int j = i+; j < n; j++){
g[i][j] = max(.,dist(i,j));
g[j][i] = g[i][j];
}
printf("Cheese %d: Travel time = %.0lf sec\n",++kas,dijkstra(n)*);
}
return ;
}

UVA1001 Say Cheese (dijkstra)的更多相关文章

  1. UVA1001 Say Cheese(Dijkstra或Floyd)

    题目链接:UVA1001 题意:在一个巨大奶酪中的A要以最短的时间与B相遇.在奶酪中走一米的距离花费的时间是10s,而奶酪中有许多洞,穿过这些洞的时间是0s.给出A.B以及各个洞的坐标,求最短的时间. ...

  2. 迪杰斯特拉(dijkstra)算法的简要理解和c语言实现(源码)

    迪杰斯特拉(dijkstra)算法:求最短路径的算法,数据结构课程中学习的内容. 1 . 理解 算法思想::设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合 ...

  3. 最短路径之迪杰斯特拉(Dijkstra)算法

    迪杰斯特拉(Dijkstra)算法主要是针对没有负值的有向图,求解其中的单一起点到其他顶点的最短路径算法.本文主要总结迪杰斯特拉(Dijkstra)算法的原理和算法流程,最后通过程序实现在一个带权值的 ...

  4. 理解最短路径——迪杰斯特拉(dijkstra)算法

    原址地址:http://ibupu.link/?id=29 1.       迪杰斯特拉算法简介 迪杰斯特拉(dijkstra)算法是典型的用来解决最短路径的算法,也是很多教程中的范例,由荷兰计算机科 ...

  5. 图论——迪杰斯特拉算法(Dijkstra)实现,leetcode

    迪杰斯特拉算法(Dijkstra):求一点到另外一点的最短距离 两种实现方法: 邻接矩阵,时间复杂度O(n^2) 邻接表+优先队列,时间复杂度O(mlogn)(适用于稀疏图) (n:图的节点数,m:图 ...

  6. 算法-迪杰斯特拉算法(dijkstra)-最短路径

    迪杰斯特拉算法(dijkstra)-最短路径 简介: 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中 ...

  7. 数据结构与算法——迪杰斯特拉(Dijkstra)算法

    tip:这个算法真的很难讲解,有些地方只能意会了,多思考多看几遍还是可以弄懂的. 应用场景-最短路径问题 战争时期,胜利乡有 7 个村庄 (A, B, C, D, E, F, G) ,现在有六个邮差, ...

  8. poj1062昂贵的聘礼(Dijkstra**)

    /* 题意: 物主有一个物品,价值为P,地位为L, 以及一系列的替代品Ti和该替代品所对应的"优惠"Vi g[u][i] 表示的是u物品被i物品替换后的优惠价格!(u>0, ...

  9. C++之路进阶——优先队列优化最短路径算法(dijkstra)

    一般的dijkstra算法利用贪心的思想,每次找出最短边,然后优化到其他点的的距离,我们还采用贪心思路,但在寻找最短边进行优化,之前是双重for循环,现在我们用优先队列来实现. 代码解释: //样例程 ...

随机推荐

  1. Several ports (8005, 8080, 8009) required

    Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The ...

  2. unity3d 在UGUI中制作自适应调整大小的滚动布局控件

    http://blog.csdn.net/rcfalcon/article/details/43459387 在游戏中,我们很多地方需要用到scroll content的概念:我们需要一个容器,能够指 ...

  3. c# UserControl 如何在父窗口中显示Scroll

    1. UserControl 不应该是Dock = Fill, 而应该使用 Anchor 2. 父窗口(或者父控件,或者容器)的AutoScroll = True 3.UserControl 加入容器 ...

  4. linux模拟http请求命令

    Http请求指的是客户端向服务器的请求消息,Http请求主要分为get或post两种,在Linux系统下可以用curl和wget命令来模拟Http的请求.下面就来介绍一下Linux系统如何模拟Http ...

  5. one jar(转)

    http://blog.csdn.net/kabini/article/details/1598827

  6. 一篇文章带你搞懂 SpringBoot与Swagger整合

    Swagger使用由于不喜欢csdn的markwoen编辑器,对代码样式支持不好,看着不舒服,对审美要求比较高的同学移步github:https://github.com/itguang/swagge ...

  7. 可以提升3倍开发效率的 Intellij IDEA快捷键大全汇总(2019)

    整理了一下IDEA的常用快捷键,可以打印出来或者弄成图片设置为桌面,为广大的程序员们节省更多的时间去谈恋爱. 常用快捷键1 Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式 ...

  8. js实现打印正三角

    代码: <html> <head> <title>function</title> </head> <body> <scr ...

  9. [HDU1595] find the longest of the shortest

    题目链接: 点我 题意: 给定一个\(n\)个点,\(m\)条边的带权无向图,起点为\(1\),终点为\(n\),现在可以删去其中的一条边,求一种删边方案使得剩下图的最短路值最大,输出这个最短路的长度 ...

  10. Dubbo理论知识

    本文是作者根据官方文档以及自己平时的使用情况,对 Dubbo 所做的一个总结.如果不懂 Dubbo 的使用的话,可以参考我的这篇文章<超详细,新手都能看懂 !使用SpringBoot+Dubbo ...