题目链接:http://poj.org/problem?id=1797

题意:给出两只青蛙的坐标A、B,和其他的n-2个坐标,任一两个坐标点间都是双向连通的。显然从A到B存在至少一条的通路,每一条通路的元素都是这条通路中前后两个点的距离,这些距离中又有一个最大距离。现在要求求出所有通路的最大距离,并把这些最大距离作比较,把最小的一个最大距离作为青蛙的最小跳远距离。

有一个明显的方法就是dfs一遍但是肯定会te,所以可以考虑一下用dp的思想。

类似记忆化搜索的思想,由于数据比较小所以不用记忆化搜索也行直接利用套3层for

dp[i][j]表示从i点到j点的minimax distance(就是题目所要求的)mmp[i][j]表示i

点到j点的距离。

for(int k = 1 ; k <= n ; k++) {

for(int i = 1 ; i <= n ; i++) {

for(int j = 1 ; j <= n ; j++) {

MIN = max(mmp[i][k] , mmp[k][j]);

MIN2 = max(dp[i][k] , dp[k][j]);

dp[i][j] = min(dp[i][j] , min(MIN , MIN2));

dp[j][i] = dp[i][j];

}

}

}

其实这3层for也是利用了floyd的思想。

#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <cstdio>
using namespace std;
double mmp[210][210] , dp[210][210] , MIN , MIN2;
int n , x , y;
struct TnT {
int x , y , num;
};
bool vis[220]; int main() {
int ans = 0;
while(scanf("%d" , &n)) {
ans++;
if(!n)
break;
TnT T[210];
for(int i = 1 ; i <= n ; i++) {
scanf("%d%d" , &x , &y);
T[i].num = i;
T[i].x = x;
T[i].y = y;
}
for(int i = 1 ; i <= n ; i++) {
for(int j = 1 ; j <= n ; j++) {
mmp[i][j] = (double)400000;
dp[i][j] = (double)400000;
}
}
for(int i = 1 ; i <= n; i++) {
int x1 = T[i].x , y1 = T[i].y , pos1 = T[i].num , x2 , y2 , pos2 , m;
for(int j = 1 ; j <= n ; j++) {
x2 = T[j].x , y2 = T[j].y , pos2 = T[j].num;
m = 1.0 * (x1 - x2) * (x1 - x2) + 1.0 * (y1 - y2) * (y1 - y2);
mmp[pos1][pos2] = min(mmp[pos1][pos2] , 1.0 * sqrt(double(m)));
mmp[pos2][pos1] = min(mmp[pos1][pos2] , mmp[pos2][pos1]);
}
}
for(int k = 1 ; k <= n ; k++) {
for(int i = 1 ; i <= n ; i++) {
for(int j = 1 ; j <= n ; j++) {
MIN = max(mmp[i][k] , mmp[k][j]);
MIN2 = max(dp[i][k] , dp[k][j]);
dp[i][j] = min(dp[i][j] , min(MIN , MIN2));
dp[j][i] = dp[i][j];
}
}
}
printf("Scenario #%d\n" , ans);
printf("Frog Distance = %.3f\n\n" , dp[1][2]);
}
return 0;
}

最新文章

  1. 【SQL语句】update ... ... from ......
  2. 基于GIS的旅游辐射区人口统计
  3. Rabbitmq集群高可用测试
  4. jQuery 实现上下,左右滑动
  5. Google C++ style guide——头文件
  6. Android数据库hibernate框架
  7. Tomcat 配置成https协议
  8. Python - SIP参考指南 - 介绍
  9. 爬取5K分辨率超清唯美壁纸
  10. 给电脑插上无线网卡,变成路由器----Windows系统承载网络的使用
  11. 转:JSON 获取属性值的方法
  12. 【转载】oracle索引详解
  13. 在 windows 开发 reactNative 的环境 搭建过程 react-native-android
  14. org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]
  15. POJ1062不错的题——spfa倒向建图——枚举等级限制
  16. 【Android】5.5 状态切换(Switch)和评级条(RatingBar)
  17. leetcode Ch3-DFS &amp; Backtracking II
  18. 书写可维护的javascript
  19. jQuery添加、移除、改变class属性
  20. 洛谷P1965 转圈游戏 [NOIP2013]

热门文章

  1. spring boot中的声明式事务管理及编程式事务管理
  2. 微服务之springboot 自定义配置(一)Application配置文件
  3. Placement_pools on Rados-GW
  4. 【网站公告】.NET Core 版博客站点第二次发布尝试
  5. The philosophy of ranking
  6. 消息中间件-activemq实战之消息持久化(六)
  7. vue-cli项目下引入vant组件
  8. 我的C语言学习1
  9. 记一次JPA遇到的奇葩错误——本地sql不识别表名的别名
  10. AutoCAD.NET中添加图形对象的基本步骤与实例演示