POJ 2253 Frogger
来源:互联网 发布:pc端护眼软件 编辑:程序博客网 时间:2024/05/01 00:42
题目链接
题意:从0号点,到1号点,找一条能通过的路,使得这条路中的最大的边,比其它所有可能的路中的边都小。
分析:用floyd算法求两点最短值。再求出从每个点开始的最长路,最后从这n个最长路中求出最小的那个即为所求。
#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define MAX_N 205using namespace std;double dp[MAX_N][MAX_N];const double inf=2000.0;struct node{ double x,y;}pos[MAX_N];int n;void warshall_floyd(){ for(int k=0;k<n;k++) { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]); } }}int main(void){ int t=0; while(scanf("%d",&n)==1) { if(n==0) break; for(int i=0;i<n;i++) scanf("%lf%lf",&pos[i].x,&pos[i].y); for(int i=0;i<n;i++) { for(int j=i;j<n;j++) { if(i==j) dp[i][j]=0; else dp[i][j]=dp[j][i]=sqrt((pos[i].x-pos[j].x)*(pos[i].x-pos[j].x)+(pos[i].y-pos[j].y)*(pos[i].y-pos[j].y)); } } warshall_floyd(); for(int k=0;k<n;k++) { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(dp[i][k]<dp[i][j]&&dp[k][j]<dp[i][j]) { if(dp[i][k]<dp[k][j]) dp[i][j]=dp[j][i]=dp[k][j]; else dp[i][j]=dp[j][i]=dp[i][k]; } } } } printf("Scenario #%d\nFrog Distance = %.3lf\n\n",++t,dp[0][1]); } return 0;}
0 0
- poj 2253 - Frogger --- SPFA
- poj 2253 - Frogger --- dijkstra
- POJ 2253 Frogger
- poj 2253 Frogger
- poj 2253 Frogger
- poj 2253 Frogger
- POJ 2253 Frogger Floyd
- poj 2253 : Frogger (dijkstra)
- Poj 2253 Frogger
- POJ 2253 Frogger
- poj 2253 Frogger
- poj 2253 Frogger
- poj 2253 Frogger
- poj 2253 Frogger
- poj-2253-Frogger
- POJ 2253 Frogger
- POJ 2253 Frogger
- POJ 2253 Frogger
- Android 面试总结
- HDU 1281 棋盘游戏-二分匹配
- Java正则表达式Matcher.group(int group)相关类解析
- POJ3181 Dollar Dayz
- 二叉树
- POJ 2253 Frogger
- POJ2993&&POJ2996
- 历史上的今天
- 正式开始的第一篇博客
- 【linux】Can't connect to MySQL server on 'XXX' (13)问题解决方式
- LINUX ROOT
- VMWare占用443端口,导致httpd服务器无法正常启动
- HDU 5787 K-wolf Number(数位DP)
- 顺序栈的代码实现