poj2253佛洛依德
题意:给出青蛙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佛洛依德相关推荐
- 十大常用算法之佛洛依德算法
十大常用算法的完整实现 一.二分查找算法:https://blog.csdn.net/weixin_46635575/article/details/121532149 二.分治算法:https:// ...
- 最短路径算法之迪杰斯特拉算法(Dijkstra)和佛洛依德算法(Floyd)
今天学习了这两种算法,都是用来求最小路径的算法,但是迪杰斯特拉算法只能从某个特定点到所有点的最短路径,而佛洛依德算法可以查出任意点到任意点的最小路径. 迪杰斯特拉: package dijkstra; ...
- 佛洛依德算法求最短路径实例
佛洛依德算法求最短路径实例 #include <iostream> #include <string.h> #include <stdlib.h> #include ...
- 佛洛依德算法C语言简单实现
计算图中每个顶点间的最短路径及路径长度 采用邻接矩阵表示图 代码如下: #include <stdio.h> #include <windows.h> #include < ...
- 迪杰斯特拉算法与佛洛依德算法
迪杰斯特拉算法用于计算:某点v0到其他所有点的最短路径,时间复杂度为O(n^2) 初态: 设定V为所有顶点的集合. 设定S为已经得到的最短路径的顶点vi的集合.即S中的顶点vi,都是已经确定下来v0到 ...
- 推免复习之数据结构与算法 佛洛依德算法
佛洛依德算法算法作为一个经典的求最短路径的算法,思路其实很简单,就是不停地进行"松弛操作",直到全部遍历一遍.那么什么是松弛操作呢?比如说我们的图存在一个邻接矩阵graph中,gr ...
- 佛洛依德算法求最短路径(记录路径信息)
佛洛依德算法: 利用D矩阵拿到邻接矩阵中的权值.path矩阵记录两点之间的移动中转点(初始值为起点). 对于邻接矩阵中 i 到 j 点的权值进行比较,若加上一个中转点 k 后的权值小于原本的权值,则对 ...
- Java实现佛洛依德算法(floyd)的完整代码
Java实现佛洛依德算法(floyd)的完整代码 /*** 弗洛伊德(floyd)算法求图中所有点对之间的最短路径:* 其中'-1'表示两点之间目前还没有联通的路径:* 结论:如果A点到G点之间有最短 ...
- 佛洛依德 c++ 最短路径算法
1 //20142880 唐炳辉 石家庄铁道大学 2 #include<iostream> 3 #include<string> 4 using namespace std; ...
最新文章
- leetCode 46. Permutations 回溯问题 | Medium
- 如何判断模糊图像_图像翻译三部曲:pix2pix, pix2pixHD, vid2vid
- 实验代做 行人识别_CVPR 2020 | 针对VI-ReID的分层跨模态行人识别
- 计算机应用能力考试ppt,计算机应用能力考试题库
- 机器学习从理论到工程的第二步-开发环境与工具篇(下)
- python整形怎么切片_python 切片操作 slice
- 2015年6月24日日报
- linux gettimeofday 头文件,linux-时间编程-time、gmtime、localtime、asctime、ctime、gettimeofday、sleep、usleep...
- Druid数据库连接池配置
- js、jQuery实现文字上下无缝轮播、滚动效果
- 接口监控_从零开始入门 K8s | 可观测性:监控与日志
- 系统性学习计算机(一)
- 文献阅读-CSC-中文错别字-有关论文搜集-+CGED
- PB中导入EXCEL数据
- linux bridge 抓包,Linux bridge hairpin mode
- vue项目中使用高德地图实现添加点标记和获取点击位置信息
- Dilated Convolutions
- pyQt5 学习笔记(18)QLineEdit 单行文本输入
- Android 应用程序未安装问题
- Chino with Train to the Rabbit Town