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;}