如果没有洞,那么任意两点的最短距离就是直线距离,洞里是瞬间的,所以看成一个点就行了(其实点也可以当作半径为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. 1.5-1.6 oozie部署

    一.部署 可参考文档:http://archive.cloudera.com/cdh5/cdh/5/oozie-4.0.0-cdh5.3.6/DG_QuickStart.html 1.解压oozie ...

  2. python 之单例

    # 单例模式 class MySQL: __instance = None def __init__(self): self.host = '127.0.0.1' self.port = 3306 @ ...

  3. window.location js截取url地址

    window.location方法的说明 原文链接: http://jiantian.org/index.php?page_id=2 window.location.href 整个URl字符串(在浏览 ...

  4. android opengl es 源码

    [转自:http://blog.csdn.net/happyhell/article/details/6086973] The entire OpenGL ES API on Android is i ...

  5. 数据结构关于AOV与AOE网的区别

    AOV网,顶点表示活动,弧表示活动间的优先关系的有向图. 即如果a->b,那么a是b的先决条件. AOE网,边表示活动,是一个带权的有向无环图, 其中顶点表示事件,弧表示活动,权表示活动持续时间 ...

  6. HDU5950【矩阵快速幂】

    主要还是i^4化成一个(i+1)^4没遇到过,还是很基础的一题矩阵快速幂: #include <bits/stdc++.h> using namespace std; typedef lo ...

  7. 16.join 用法(拼接列表时里面必须为str类型)

    s1='alex' s2='+'.join(s1) print(s2,type(s2))#a+l+e+x <class 'str'> l1=['小红','小刚','小明'] 前提:列表中的 ...

  8. 第二篇 HTML5打包发布IOS APP之苹果开发者账号申请流程

    打包技术转移到了公众号

  9. 洛谷 P1908 逆序对(树状数组解法)

    归并排序解法:https://www.cnblogs.com/lipeiyi520/p/10356882.html 题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不 ...

  10. SRE思想

    1 规模效应 业务越庞大,服务器就越多,服务越多,就越需要拆分成分布式架构.架构越复杂,对运维的能力要求就越高.出错的概率就越大,运维的工作量就越大.因此就要更多开发提升效率的工具. 而在小企业,业务 ...