poj 2253 Frogger
来源:互联网 发布:网络春晚2013 编辑:程序博客网 时间:2024/05/22 01:26
先给说下题目的大意,一直青蛙坐在湖中的一个石头上,他看到另外一个青蛙在另外一个石头上,他打算从石头上跳过去去寻找另外一只青蛙。
这里有一个概念是“青蛙距离”,被定义为两块石头之间的所有路径中的最大跳跃距离的最小值。
分别给出两个青蛙所在石头的坐标以及其他石头的坐标,计算两个青蛙之间的青蛙距离。
测试数据的第一行为一个整数n,表示石头的数目。
接下来有n行,每行为两个整数,表示第i块石头的坐标。
前两行为两个青蛙的坐标。
解法:利用floyd传递闭包的特点,每个值表示两点间的边的最大值。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;typedef struct{ double x,y;} Point;int n;double Graph[300][300];double dis(const Point& a,const Point& b){ return sqrt((a.x - b.x)*(a.x - b.x)+(a.y - b.y)*(a.y - b.y));}void floyd(){ for(int k = 0 ; k < n ; k++) { for(int i = 0 ; i < n ; i ++) { for(int j = 0 ; j < n ; j++) { if(Graph[i][j] > max(Graph[i][k],Graph[k][j])) { Graph[i][j] = max(Graph[i][k],Graph[k][j]); } } } }}int main(){ int cnt = 1; Point point[210]; while(scanf("%d",&n) && n) { for(int i = 0 ; i < n ; i++) { scanf("%lf %lf",&point[i].x,&point[i].y); } for(int i = 0 ; i < n ; i++) { for(int j = 0 ; j < n ; j++) { Graph[i][j] = 0.0; } } for(int i = n - 1 ; i >= 0 ; i--) { for(int j = i - 1 ; j >= 0 ; j--) { Graph[i][j] = dis(point[i],point[j]); Graph[j][i] = Graph[i][j]; } } floyd(); printf("Scenario #%d\nFrog Distance = %.3lf\n\n",cnt++,Graph[0][1]); } return 0;}
0 0
- poj 2253 - Frogger --- SPFA
- poj 2253 - Frogger --- dijkstra
- POJ 2253 Frogger
- poj 2253 Frogger
- poj 2253 Frogger
- poj 2253 Frogger
- POJ 2253 Frogger Floyd
- poj 2253 : Frogger (dijkstra)
- Poj 2253 Frogger
- POJ 2253 Frogger
- poj 2253 Frogger
- poj 2253 Frogger
- poj 2253 Frogger
- poj 2253 Frogger
- poj-2253-Frogger
- POJ 2253 Frogger
- POJ 2253 Frogger
- POJ 2253 Frogger
- poj 1001 Exponentiation 高精度乘方
- boost::ptime::local_time调用的开销
- nsaco3.1.邮票
- Linux高速网卡驱动设计随笔
- poj 2503 Babelfish(广义索引类线性表:快排+二分)
- poj 2253 Frogger
- 《Struts2技术内幕》 新书部分篇章连载(四)—— 多视角透析Struts2
- JavaScript 实例
- C、C++ 学习经历
- HDOJ-1272(判断无向图是不是树,BFS || 并查集)
- wcf学习第4天(通过配置文件来设置)
- 风起了,唯有努力活着~
- 奇葩的语言,奇葩的语法
- 阿里巴巴Dubbo实现的源码分析