B - Frogger POJ - 2253

题意: 从 1 号点出发,找每一条能够到达 2 号点的路径,每条路径的答案是该路径中相邻两点之间距离的最大值,求这些答案中的最小值。

思路: 感觉不是最短路,是不是用二分查找呢,但是又要遍历每一条路径,那就直接套用最短路的思想,从第 1 号点出发,贪心的求出其能够到达的点的最小距离,走到这一点(此时一定是路径上最大距离的最小值),再用这个距离更新没有被访问过的每一个点的路径答案(路径最大跨度为当前点的最大跨度与当前点到各个点的距离中的较大者),直到所有的点都被访问过,则返回最终答案即可。

AC代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = 250;
double dis[maxn]; // 每个点到达 起点 的青蛙跳
bool vis[maxn];
double a[maxn][maxn]; // 两点之间的距离
double   x[maxn], y[maxn];
int n;void init() {memset(vis, 0, sizeof(vis));memset(a, inf, sizeof(a));
} double dijkstra() {int u;double minn = inf;for(int i = 1; i <= n; i++) {dis[i] = a[1][i];}vis[1] = 1;while(1) {minn = inf;for(int i = 1; i <= n; i++) {if(!vis[i] && dis[i] < minn) { // 每次从当前点出发找一个最小的距离跨度 minn = dis[i];u = i;}}if(minn == inf) break; // 所有点都更新过了 vis[u] = 1;// 更新还没有被标记过的点到起点的最小距离跨度(因为标记过的点都已经贪心的选取了最小跨度所以没必要再次更新) for(int i = 1; i <= n; i++) {if(!vis[i] && a[u][i] < inf && dis[i] > max(dis[u], a[u][i])) dis[i] = max(dis[u], a[u][i]); // 每次确定一个点之后都要考虑当前是否能跨到下一块石头上 }}return dis[2];
} int main() {//  freopen("test.in", "r", stdin); int kase = 0;while(~scanf("%d", &n) && n) {init();for(int i = 1; i <= n; i++) scanf("%lf%lf", &x[i], &y[i]);for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)a[i][j] = sqrt(pow(x[i]-x[j],2)+pow(y[i]-y[j],2)); // 存每个点之间的距离 double ans = dijkstra();printf("Scenario #%d\n", ++kase);printf("Frog Distance = %.3f\n\n", ans); // 注意输出用 %.3f 我用%.3lfWA了好几发}return 0;
}

B - Frogger POJ - 2253相关推荐

  1. POJ 2253 Frogger(floyd dijkstra spfa)

    题目链接:http://poj.org/problem?id=2253 题目: 弗雷迪青蛙正坐在湖中央的一块石头上. 突然,他注意到正坐在另一块石头上的菲奥娜青蛙. 他打算去看望她,但由于水很脏,游客 ...

  2. [kuangbin带你飞]专题四 最短路练习 B( POJ 2253) Frogger(spfa)

    B - Frogger(spfa) 题目链接:https://vjudge.net/contest/66569#problem/B 题目: Freddy Frog is sitting on a st ...

  3. POJ 2253 Frogger(最短路 Floyd)

    Frogger 大意: 给出两个青蛙的坐标和其他n-2个石头的坐标,任一两个坐标点间都是双向连通的.现在要求求出所有通路的最大距离,并把这些最大距离作比较,把最小的一个最大距离作为青蛙的最小跳远距离. ...

  4. POJ 2253 Frogger(最短路Floyd)题解

    题意:想给你公青蛙位置,再给你母青蛙位置,然后给你剩余位置,问你怎么走,公青蛙全力跳的的最远距离最小. 思路:这里不是求最短路径,而是要你找一条路,青蛙走这条路时,对他跳远要求最低.这个思想还是挺好迁 ...

  5. 【POJ - 2253】Frogger(floyd,或 部分瓶颈生成树的最大边)

    题干: 湖中有n块石头,编号从1到n,有两只青蛙,Bob在1号石头上,Alice在2号石头上,Bob想去看望Alice,但由于水很脏,他想避免游泳,于是跳着去找她.但是Alice的石头超出了他的跳跃范 ...

  6. POJ 2253 Frogger (求某两点之间所有路径中最大边的最小值)

    题意:有两只青蛙,a在第一个石头,b在第二个石头,a要到b那里去,每种a到b的路径中都有最大边,求所有这些最大边的最小值. 思路:将所有边长存起来,排好序后,二分枚举答案. 时间复杂度比较高,344m ...

  7. poj 2253 最短路变形——最大边的最小值

    文章目录 本题:最短路变形--最大边的最小值 最短路变形--最小边的最大值 本题:最短路变形--最大边的最小值 题意: 给出两只青蛙.以及其他石头的坐标,需要求出可以到达另一只青蛙的所有路径中,青蛙跳 ...

  8. POJ 最短路问题-Dijkstra

    POJ 最短路问题集锦: Dijkstra算法: 详细介绍: http://hi.baidu.com/iotbill/item/cb5fc1de28a3e63721e250d9 Dijkstra算法是 ...

  9. POJ 图论---1_Uriel's Corner Uriel's Coding Learning Cubing Zone

    原文地址: http://www.cppblog.com/Uriel/articles/121814.html 内容: 刚开始学图论不久,这个是自己做过的一点图论水题,不一定全,有什么错误或者大家有其 ...

最新文章

  1. 【最精简写法】获取一维数组和对象数组最值:最大值、最小值,返回对象
  2. 使用C++的Socket实现从客户端到服务端,服务端到客户端传输文件
  3. JNI 实战全面解析
  4. C++ Primer 5th笔记(chap 17 标准库特殊设施)随机数
  5. python read函数菜鸟_关于python的菜鸟问题
  6. 7分钟理解JS的节流、防抖及使用场景
  7. Linux SVN一次增加多个文件并批量上传
  8. 修改hosts 流畅使用coursera
  9. 问题 1073: 弟弟的作业
  10. 【C语言进阶深度学习记录】三十一 数组作为函数参数时退化为指针
  11. 解决Github加载ipynb文件缓慢/失败
  12. X Window Bitmaps And Pixmaps
  13. TMS物流运输管理系统、智慧物流、智能运输、运单管理、预开单、补录运单、提货管理、库存管理、签收管理、短驳管理、车辆配载、送货管理、回单管理、退货管理、中转管理、承运商、路由、车线、司机、油卡、车辆
  14. CString转char*
  15. ORB_SLAM2探秘 第一章
  16. HTML标签和属性大全
  17. 两个excel表格信息合并 自动匹配_别再复制黏贴了,合并两个Excel表格可以很简单!...
  18. mysql 问题:Unknown system variable 'query_cache_size'
  19. 安卓智能手机运行iFIX组态软件
  20. 全国网上统考计算机试题及答案,2017 年研究生全国统考计算机试题操作系统题目及答案...

热门文章

  1. 如何快速搭建 LaTeX 轻量级写作环境(VSCode)?
  2. uva-10400-搜索
  3. 扒一扒.net、.net framework、mono和Unity
  4. 如何找到存在Ceph里面的文件
  5. 压缩工具gzip,bzip2,xz,zip,tar
  6. [dp之路]7.25test
  7. 1.1.2 ADO.NET模型
  8. a_2可以用作python标识符嘛,【单选题】下列选项中,可作为Python标识符的是哪项? A. getpath() B. throw C. my#var D. _ My_price...
  9. mysql association_mybatis association 一对一
  10. arm b bl 地址无关码_ARM_异常和中断