hdu 1245 Saving James Bond 策画几何+最短路 最短路求步数最少的路径
#include<stdio.h>
#include<string.h>
#include<math.h>
#define inf 0x3fffffff
#define N 200
#define eps 1e-10
#include<queue>
using namespace std;
struct node {
int x,y;
}ma[N];
struct nodee {
int u,v,next;
double w;
}bian[N*N];
int yong,head[N],n;
void addedge(int u,int v,double w) {
bian[yong].u=u;
bian[yong].v=v;
bian[yong].w=w;
bian[yong].next=head[u];
head[u]=yong++;
}
double MIN(double a,double b) {
return a>b?b:a;
}
void bfs() {//宽搜
queue<int>q;
double dist[N];
int step[N],i,visit[N];
memset(visit,0,sizeof(visit));
while(!q.empty())
q.pop();
q.push(0);
for(i=1;i<=n+1;i++)
dist[i]=inf;
step[0]=0;
dist[0]=0;visit[0]=1;
while(!q.empty()){
int cur=q.front();
q.pop();
for(i=head[cur];i!=-1;i=bian[i].next) {
int v=bian[i].v;
if((dist[v]>dist[cur]+bian[i].w+eps||fabs(dist[v]-dist[cur]-bian[i].w)<=eps)&&step[v]>step[cur]+1&&visit[v]==0) {//判断条件如果相等就要比较它的最少的步数
step[v]=step[cur]+1;
dist[v]=dist[cur]+bian[i].w;
visit[v]=1;
q.push(v);
}
}
}
if(dist[n+1]<inf)
printf("%.2f %d\n",dist[n+1],step[n+1]);
else
printf("can't be saved\n");
return ;
}
int main() {
int i,j,s,t;
double limit,minn;
while(scanf("%d%lf",&n,&limit)!=EOF) {
t=n+1;s=0;
yong=0;
memset(head,-1,sizeof(head));
for(i=1;i<=n;i++) {
scanf("%d%d",&ma[i].x,&ma[i].y);
minn=MIN(fabs(50.0-fabs(1.0*ma[i].x)),fabs(50.0-fabs(1.0*ma[i].y)));
if(minn<limit+eps) {//将符合条件的边
addedge(i,t,minn);
addedge(t,i,0);//
}
minn=fabs(sqrt(1.0*ma[i].x*ma[i].x+1.0*ma[i].y*ma[i].y)-7.5);
if(minn<limit+eps) {
addedge(s,i,minn);//
addedge(i,s,0);//
}
}
if(limit+eps>42.50) {//如果可以直接跳到岸上就直接输出
printf("42.50 1\n");
continue;
}
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++) {
minn=inf;
minn=MIN(minn,sqrt(1.0*(ma[i].x-ma[j].x)*(ma[i].x-ma[j].x)+1.0*(ma[i].y-ma[j].y)*(ma[i].y-ma[j].y)));
if(minn<limit+eps) {
addedge(i,j,minn);
addedge(j,i,minn);//双向边
}
}
bfs();
}
return 0;
}
hdu 1245 Saving James Bond 策画几何+最短路 最短路求步数最少的路径的更多相关文章
- hdu 1245 Saving James Bond
http://acm.hdu.edu.cn/showproblem.php?pid=1245 #include <cstdio> #include <cstring> #inc ...
- Saving James Bond(dijk)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1245 Saving James Bond Time Limit: 6000/3000 MS (Java ...
- PTA 07-图5 Saving James Bond - Hard Version (30分)
07-图5 Saving James Bond - Hard Version (30分) This time let us consider the situation in the movie ...
- Saving James Bond - Easy Version (MOOC)
06-图2 Saving James Bond - Easy Version (25 分) This time let us consider the situation in the movie & ...
- pat06-图4. Saving James Bond - Hard Version (30)
06-图4. Saving James Bond - Hard Version (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作 ...
- pat05-图2. Saving James Bond - Easy Version (25)
05-图2. Saving James Bond - Easy Version (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作 ...
- Saving James Bond - Hard Version
07-图5 Saving James Bond - Hard Version(30 分) This time let us consider the situation in the movie &q ...
- Saving James Bond - Easy Version 原创 2017年11月23日 13:07:33
06-图2 Saving James Bond - Easy Version(25 分) This time let us consider the situation in the movie &q ...
- PAT Saving James Bond - Easy Version
Saving James Bond - Easy Version This time let us consider the situation in the movie "Live and ...
随机推荐
- 好记性不如烂笔头——WebService与Remoting
一.WebService总体上分为5个层次: 1)HTTP传输信道 2)XML的数据格式 3)SOAP的封装协议,用于传输 4)WSDL的描述方式,用于引用 5)UDDI,通用描述.发现与集成服务,用 ...
- html5--视频播放器实例
html5--视频播放器实例 总结: 1.相对定位和绝对定位的区别,两者都是浮起来了 2.属性和方法都是有对象的,搞清楚对象之后,属性和方法就很好用了,我们一般可以用document.getEleme ...
- 【BZOJ 3942】 Censoring
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3942 [算法] 栈 + KMP [代码] #include<bits/stdc ...
- 使用idea2.5建立maven项目
使用idea的步骤: 1.建立一个新的maven项目 2.选中maven项目 3.点击next,输入groupID和artifactid 4.点击next 选择projectlocation 5.选 ...
- python 9:list.reverse()(倒置原列表,可恢复改变)
bicycles = ['trek', 'cannondale', 'redline', 'specialized'] print(bicycles) bicycles.reverse() #倒置原列 ...
- [Luogu 2331] [SCOI2005]最大子矩阵
[Luogu 2331] [SCOI2005]最大子矩阵 题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 输入输出格式 ...
- 画板(适用于手机、PC端)
Html代码 <script type="text/javascript" src="jquery-1.9.1.min.js"></scrip ...
- 自定义View(6)paint设置两个图层相交时的显示方式,包含清空canvas
1.问题 在已有的图层上绘图将会在其上面添加一层新的图层. 如果新的图层是完全不透明的,那么它将完全遮挡住下面的图层,而setXfermode就可以来解决这个问题.这个函数设置两个图层相交时的模式 . ...
- JavaScript 元素的插入顺序以及动态加载js
*****************记录下今天的心得***************** 1.元素的插入顺序 需求:异步从后台读取两个数据a和b,并动态加载到父容器x中,要求a必须在b的左边 实际情况:一 ...
- CSS3之 transform和animation区别
CSS3 有3种和动画相关的属性:transform, transition, animation.其中 transform 描述了元素静态样式.而transition 和 animation 却都能 ...