POJ 2253 Frogger(dijkstra)
2015-08-27 09:25
411 查看
Description
有两只青蛙和若干块石头,现在已知这些石头的坐标,两只青蛙A坐标和青蛙B坐标是第一个和第二个坐标,现在A青蛙想要到B青蛙那里去,并且A青蛙可以借助任意石头的跳跃,而从A到B有若干通路,问从A到B的所有通路上的最大边
Input
多组输入,每组输入第一行为点的个数n,之后n行为每个点的坐标,每组用例间用空行隔开,以n=0结束输入
Output
对于每组输入,输出青蛙的最小跳远距离
Sample Input
2
0 0
3 4
3
17 4
19 4
18 5
0
Sample Output
Scenario #1
Frog Distance = 5.000
Scenario #2
Frog Distance = 1.414
Solution
一个简单的最短路径变形,只要将d[i]的意义变为从1到i的最大边即可,然后修改下更新条件就可以了
Code
有两只青蛙和若干块石头,现在已知这些石头的坐标,两只青蛙A坐标和青蛙B坐标是第一个和第二个坐标,现在A青蛙想要到B青蛙那里去,并且A青蛙可以借助任意石头的跳跃,而从A到B有若干通路,问从A到B的所有通路上的最大边
Input
多组输入,每组输入第一行为点的个数n,之后n行为每个点的坐标,每组用例间用空行隔开,以n=0结束输入
Output
对于每组输入,输出青蛙的最小跳远距离
Sample Input
2
0 0
3 4
3
17 4
19 4
18 5
0
Sample Output
Scenario #1
Frog Distance = 5.000
Scenario #2
Frog Distance = 1.414
Solution
一个简单的最短路径变形,只要将d[i]的意义变为从1到i的最大边即可,然后修改下更新条件就可以了
Code
#include<cstdio> #include<cmath> #include<iostream> using namespace std; #define INF (1<<29) #define maxn 222 float x[maxn],y[maxn]; bool vis[maxn]; float d[maxn]; int n; float dis(int a,int b)//两点间距离 { return sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b])); } void Dijkstra() { for(int i=0;i<n;i++)//初始化 { d[i]=INF; vis[i]=false; } d[0]=0; for(int i=0;i<n;i++) { int mind=INF,minp; for(int j=0;j<n;j++) if(!vis[j]&&mind>d[j]) { mind=d[j]; minp=j; } vis[minp]=true; for(int j=0;j<n;j++) d[j]=min(d[j],(max(d[minp],dis(minp,j)))); } } int main() { int res=1; while(scanf("%d",&n),n) { for(int i=0;i<n;i++) scanf("%f%f",&x[i],&y[i]); Dijkstra(); printf("Scenario #%d\nFrog Distance = %.3f\n\n",res++,d[1]); } return 0; }
相关文章推荐
- PS学习笔记----------利用图层蒙版来实现无损抠图
- (转)2014年最新前端开发面试题(题目列表+答案 完整版)
- JQuery读取XML文件
- js在指定tr后面添加tr
- 笔记本 i3 i5 i7 区别
- C语言中将日期和时间以字符串格式输出的方法
- 仔细观察,别试图控制一切
- 回复一个朋友:如何理解委托
- ceph存储 fio参数详解
- Android 5的嵌套滑动机制 和 RecyclerView的一些扩展功能
- 反射
- UIlabel
- IOS-NSSortDescriptor的使用---排序
- 12549 - Sentry Robots (二分图匹配)
- oracle函数trunc的使用
- 关于使用UIWebView加载HTTPS站点
- jQuery手机拨号界面特效代码分享
- JS实现自动切换文字的导航效果代码
- tcpreplay
- windows和linux查看端口占用情况