poj 2253 #floyd
来源:互联网 发布:临高启明实体书 淘宝 编辑:程序博客网 时间:2024/06/05 23:04
/**在一个完全图上,求从A到B的最短路上的最大的相邻两点的距离。*/#include <stdio.h>#include <math.h>#define EPS 1e-4#define N 256double dp[N][N],st[N][2];double cal_d(int i,int j){ return sqrt((st[i][0] - st[j][0]) * (st[i][0] - st[j][0]) + (st[i][1] - st[j][1]) * (st[i][1] - st[j][1]));}int main(){ int cas = 0; int n,i,j,k; while(scanf("%d",&n) == 1 && n) { for(i = 0; i < n; ++i) scanf("%lf%lf",&st[i][0],&st[i][1]); for(i = 0; i < n; ++i) for(j = 0; j < i; ++j) dp[i][j] = dp[j][i] = cal_d(i,j); ///dp[i][j] 表示从i 跳到j 的最大步数 for(k = 0; k < n; ++k) for(i = 0; i < n; ++i) for(j = 0; j < i; ++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",++cas,dp[0][1]); } return 0;}