UVA1001 Say Cheese (dijkstra)
如果没有洞,那么任意两点的最短距离就是直线距离,洞里是瞬间的,所以看成一个点就行了(其实点也可以当作半径为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)的更多相关文章
- UVA1001 Say Cheese(Dijkstra或Floyd)
题目链接:UVA1001 题意:在一个巨大奶酪中的A要以最短的时间与B相遇.在奶酪中走一米的距离花费的时间是10s,而奶酪中有许多洞,穿过这些洞的时间是0s.给出A.B以及各个洞的坐标,求最短的时间. ...
- 迪杰斯特拉(dijkstra)算法的简要理解和c语言实现(源码)
迪杰斯特拉(dijkstra)算法:求最短路径的算法,数据结构课程中学习的内容. 1 . 理解 算法思想::设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合 ...
- 最短路径之迪杰斯特拉(Dijkstra)算法
迪杰斯特拉(Dijkstra)算法主要是针对没有负值的有向图,求解其中的单一起点到其他顶点的最短路径算法.本文主要总结迪杰斯特拉(Dijkstra)算法的原理和算法流程,最后通过程序实现在一个带权值的 ...
- 理解最短路径——迪杰斯特拉(dijkstra)算法
原址地址:http://ibupu.link/?id=29 1. 迪杰斯特拉算法简介 迪杰斯特拉(dijkstra)算法是典型的用来解决最短路径的算法,也是很多教程中的范例,由荷兰计算机科 ...
- 图论——迪杰斯特拉算法(Dijkstra)实现,leetcode
迪杰斯特拉算法(Dijkstra):求一点到另外一点的最短距离 两种实现方法: 邻接矩阵,时间复杂度O(n^2) 邻接表+优先队列,时间复杂度O(mlogn)(适用于稀疏图) (n:图的节点数,m:图 ...
- 算法-迪杰斯特拉算法(dijkstra)-最短路径
迪杰斯特拉算法(dijkstra)-最短路径 简介: 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中 ...
- 数据结构与算法——迪杰斯特拉(Dijkstra)算法
tip:这个算法真的很难讲解,有些地方只能意会了,多思考多看几遍还是可以弄懂的. 应用场景-最短路径问题 战争时期,胜利乡有 7 个村庄 (A, B, C, D, E, F, G) ,现在有六个邮差, ...
- poj1062昂贵的聘礼(Dijkstra**)
/* 题意: 物主有一个物品,价值为P,地位为L, 以及一系列的替代品Ti和该替代品所对应的"优惠"Vi g[u][i] 表示的是u物品被i物品替换后的优惠价格!(u>0, ...
- C++之路进阶——优先队列优化最短路径算法(dijkstra)
一般的dijkstra算法利用贪心的思想,每次找出最短边,然后优化到其他点的的距离,我们还采用贪心思路,但在寻找最短边进行优化,之前是双重for循环,现在我们用优先队列来实现. 代码解释: //样例程 ...
随机推荐
- struts2-045漏洞浅析
http://blog.csdn.net/rossrocket/article/details/67674290
- java集合框架之ArrayList与LinkedList的区别
参考http://how2j.cn/k/collection/collection-arraylist-vs-linkedlist/690.html#nowhere ArrayList和LinkedL ...
- 「一入 Java 深似海 」系列课程 - 第一期
10分30秒开始 小马哥技术博客: https://mercyblitz.github.io/ github地址: https://github.com/mercyblitz 33分28 https: ...
- sqlserver——视图
数据库中的视图是一个虚拟表.同真实的表一样,视图包含一系列带有名称的列和行数据,行和列数据用来自由定义视图和查询所引用的表,并且在引用视图时动态产生.本篇将通过一些实例来介绍视图的概念,视图的作用,创 ...
- WPF后台通知前台事件(ViewModelBase记录)
版本1: 定义:public class ModelBase : INotifyPropertyChanged { public event PropertyChangedEventHandler P ...
- c#中 这种构造方法Recer(…):this(…){ }
指的是构造函数首先调用另外一个构造函数. class Program { static void Main(string[] args) { Person p2 = new Person(" ...
- LightOJ1197【数学】
引自:WONTER 题意: 给你两个数,a,b,让你求区间[a,b]里面有多少个素数: 思路: 首先要知道,我们要想筛 [1, b] 中所有的素数,只需要用到 [1, sqrt(b)] 中的所有素数来 ...
- HDU 1556【线段树区间更新】
这篇lazy讲的很棒: https://www.douban.com/note/273509745/ if(tree[rt].l == l && r == tree[rt].r) 这里 ...
- 端口渗透·网站渗透过程 --21 ,22,873,3306,6379,8080(8080端口是针对CMS的渗透)
声明:文章渗透网站为模拟环境,文章只为利用过程 文章为信息收集和端口渗透两部分,21端口为ftp版本漏洞 8080端口为CMS的渗透 信息收集: ·使用扫描工具nmap ,PortScan 对整个网段 ...
- 【BZOJ1855】[Scoi2010] 股票交易
→BZOJ任意门← 很显然的动态规划题(笑) 容易想到DP的数组 f[i][j] 表示第i天手上有j股股票时能赚到最多的钱. 接下来就是转移了,有这么多变量一定要看清楚,仔细地分情况讨论. 每次转移时 ...