题意:给出青蛙A,B和若干石头的坐标,现青蛙A想到青蛙B那,A可通过任意石头到达B,

问从A到B多条路径中的最长边中最短的边

因为n<=200,故用佛洛依德水一哈。

佛洛依德是来求多源最短路,把ai和aj两点的最短距离通过松弛来求,用另一个点k作为中间节点

i-k,k-j来松弛ij之间的距离,整体上是dp的思想.

核心代码是三个循环

本题比较特殊 是求最长边里面的最短边 所以要修改最后的转台转移的条件和状态转移方程

if(d[i][j]>max(d[i][k],d[k][j])d[i][j]=max(d[i][k],d[k][j]);

code:

using namespace std;
typedef long long ll;
const double INF = 0x7fffffff;
double d[215][215];
int n;
double counter(int i, int j)
{return sqrt((double)(corr[i].x - corr[j].x)*(corr[i].x - corr[j].x) + (corr[i].y - corr[j].y)*(corr[i].y - corr[j].y));
}
int main()
{int iCase = 0;while (scanf("%d", &n) != EOF&&n){int i, j,k;iCase++;printf("Scenario #%d\n", iCase);for (i = 1; i <= n; i++){scanf("%d%d",&corr[i].x,&corr[i].y);}for (i = 1; i <= n; i++){for (j = i; j <= n; j++){if (i == j) d[i][j] =counter(i,j);else d[j][i]=d[i][j] = counter(i, j);}}for (i = 1; i <= n; i++){for ( j = 1; j <= n; j++){for ( k = 1; k <= n; k++){if (d[j][k] > max(d[j][i],d[i][k])){d[j][k] = max(d[j][i], d[i][k]);}}}}printf("Frog Distance = %.3f\n\n", d[1][2]);}
}

更新一组测试数据:

2
0 0
3 4

3
17 4
19 4
18 5
8
1 1
4 0
1 2
2 2
3 2
4 2
3 0
5 1
3
9 10
10 10
100 10
6
5 5
100 100
4 4
3 3
2 2
1 1
5
1 2
2 1
3 2
4 1
5 2
3
999 999
1 1
3 3

0

答案

Scenario #1
Frog Distance = 5.000

Scenario #2
Frog Distance = 1.414

Scenario #3
Frog Distance = 1.414

Scenario #4
Frog Distance = 1.000

Scenario #5
Frog Distance = 134.350

Scenario #6
Frog Distance = 1.414

Scenario #7
Frog Distance = 1408.557

poj2253佛洛依德相关推荐

  1. 十大常用算法之佛洛依德算法

    十大常用算法的完整实现 一.二分查找算法:https://blog.csdn.net/weixin_46635575/article/details/121532149 二.分治算法:https:// ...

  2. 最短路径算法之迪杰斯特拉算法(Dijkstra)和佛洛依德算法(Floyd)

    今天学习了这两种算法,都是用来求最小路径的算法,但是迪杰斯特拉算法只能从某个特定点到所有点的最短路径,而佛洛依德算法可以查出任意点到任意点的最小路径. 迪杰斯特拉: package dijkstra; ...

  3. 佛洛依德算法求最短路径实例

    佛洛依德算法求最短路径实例 #include <iostream> #include <string.h> #include <stdlib.h> #include ...

  4. 佛洛依德算法C语言简单实现

    计算图中每个顶点间的最短路径及路径长度 采用邻接矩阵表示图 代码如下: #include <stdio.h> #include <windows.h> #include < ...

  5. 迪杰斯特拉算法与佛洛依德算法

    迪杰斯特拉算法用于计算:某点v0到其他所有点的最短路径,时间复杂度为O(n^2) 初态: 设定V为所有顶点的集合. 设定S为已经得到的最短路径的顶点vi的集合.即S中的顶点vi,都是已经确定下来v0到 ...

  6. 推免复习之数据结构与算法 佛洛依德算法

    佛洛依德算法算法作为一个经典的求最短路径的算法,思路其实很简单,就是不停地进行"松弛操作",直到全部遍历一遍.那么什么是松弛操作呢?比如说我们的图存在一个邻接矩阵graph中,gr ...

  7. 佛洛依德算法求最短路径(记录路径信息)

    佛洛依德算法: 利用D矩阵拿到邻接矩阵中的权值.path矩阵记录两点之间的移动中转点(初始值为起点). 对于邻接矩阵中 i 到 j 点的权值进行比较,若加上一个中转点 k 后的权值小于原本的权值,则对 ...

  8. Java实现佛洛依德算法(floyd)的完整代码

    Java实现佛洛依德算法(floyd)的完整代码 /*** 弗洛伊德(floyd)算法求图中所有点对之间的最短路径:* 其中'-1'表示两点之间目前还没有联通的路径:* 结论:如果A点到G点之间有最短 ...

  9. 佛洛依德 c++ 最短路径算法

    1 //20142880 唐炳辉 石家庄铁道大学 2 #include<iostream> 3 #include<string> 4 using namespace std; ...

最新文章

  1. leetCode 46. Permutations 回溯问题 | Medium
  2. 如何判断模糊图像_图像翻译三部曲:pix2pix, pix2pixHD, vid2vid
  3. 实验代做 行人识别_CVPR 2020 | 针对VI-ReID的分层跨模态行人识别
  4. 计算机应用能力考试ppt,计算机应用能力考试题库
  5. 机器学习从理论到工程的第二步-开发环境与工具篇(下)
  6. python整形怎么切片_python 切片操作 slice
  7. 2015年6月24日日报
  8. linux gettimeofday 头文件,linux-时间编程-time、gmtime、localtime、asctime、ctime、gettimeofday、sleep、usleep...
  9. Druid数据库连接池配置
  10. js、jQuery实现文字上下无缝轮播、滚动效果
  11. 接口监控_从零开始入门 K8s | 可观测性:监控与日志
  12. 系统性学习计算机(一)
  13. 文献阅读-CSC-中文错别字-有关论文搜集-+CGED
  14. PB中导入EXCEL数据
  15. linux bridge 抓包,Linux bridge hairpin mode
  16. vue项目中使用高德地图实现添加点标记和获取点击位置信息
  17. Dilated Convolutions
  18. pyQt5 学习笔记(18)QLineEdit 单行文本输入
  19. Android 应用程序未安装问题
  20. Chino with Train to the Rabbit Town

热门文章

  1. Unity RenderTexture作为UI展示模型出现抖动
  2. WIN7无法保存时区为东八区(+08:00)
  3. 盘点:业界最受瞩目的802.11ax无线产品
  4. 在html监听鼠标拖动,使用javaScript实现鼠标拖拽事件
  5. Python 列表详解
  6. java8 GroupingBy 用法大全
  7. php剪裁图片,PHP实现图片裁剪与缩放的几种方法
  8. java获取一段时间内的所有时间
  9. 作者致谢-引用oldjavaman的文章
  10. 苏轼《水调歌头·中秋有怀子由》解读