POJ 2253 —— Frogger
2016-01-31 15:30
363 查看
原题:http://poj.org/problem?id=2253
题意:有n个石头,给出每个石头的坐标;青蛙A在第一块石头,青蛙B在第二块石头,A要去找B;
求A到B的所有路径中最小的Frog Distance,Frog Distance定义为青蛙A在某条路径中所跳的最大距离;
题意:有n个石头,给出每个石头的坐标;青蛙A在第一块石头,青蛙B在第二块石头,A要去找B;
求A到B的所有路径中最小的Frog Distance,Frog Distance定义为青蛙A在某条路径中所跳的最大距离;
#include<cstdio> #include<cstring> #include<string> #include<cmath> #define inf 1e9 using namespace std; const int maxn = 250; bool vis[maxn]; int dis[maxn], d[maxn][maxn]; int n, T = 0; struct node { int x, y; }p[maxn]; void Dijkstra() { memset(vis, false, sizeof vis); for(int i = 1;i<=n;i++) dis[i] = d[i][1]; vis[1] = true; for(int i = 1;i<=n;i++) { int k = -1; int minn = inf; for(int j = 1;j<=n;j++) { if(!vis[j] && minn >= dis[j]) { k = j; minn = dis[j]; } } if(k == -1) break; vis[k] = true; for(int j = 1;j<=n;j++) { if(!vis[j]) { int t = max(dis[k], d[k][j]); dis[j] = min(dis[j], t); } } } } int main() { while(~scanf("%d", &n)) { if(n == 0) break; for(int i = 1;i<=n;i++) scanf("%d%d", &p[i].x, &p[i].y); for(int i = 1;i<=n;i++) { int x1 = p[i].x, y1 = p[i].y; for(int j = 1;j<=n;j++) { int x2 = p[j].x, y2 = p[j].y; d[i][j] = (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2); } d[i][i] = 0; } Dijkstra(); float ans = sqrt(1.0*dis[2]); printf("Scenario #%d\n", ++T); printf("Frog Distance = %.3f\n\n", ans); } return 0; }
相关文章推荐
- 年末总结——关于读书学习
- MacDown 编辑器 使用
- BZOJ-1206 虚拟内存 Hash+离散化+Priority_Queue
- Android NDK开发基础——配置及简单案例
- 《Learn You Some Erlang for Great Good!》的学习笔记(四)
- BZOJ-1206 虚拟内存 Hash+离散化+Priority_Queue
- 数据结构和算法学习
- OpenPyXL学习
- HUD1754 (完全二叉树)
- hdu 5615 Jam's math problem(判断是否能合并多项式)
- POJ2502(最短路径dijkstra)
- 图的邻接表
- 一个对象怎么调用另一个对象, 打jar包,到底调用哪一个方法, 匿名对象, 空对象
- bzoj3674 可持久化并查集加强版
- 深入讲解C#编程中嵌套类型和匿名类型的定义与使用
- Python2.x和Python3.x的区别
- centos7/rhel7设置笔记本触摸版
- Android流量监控类 trafficstats
- 搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门
- 测试0131