POJ 2253Frogger(翻译/最短路/floyd/思维)

来源:互联网 发布:安徽宝德网络 编辑:程序博客网 时间:2024/06/07 02:45

题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66569#problem/B

代码:

#include<stdio.h>#include<string.h>#include<cmath>using namespace std;const int maxn=205;float x[maxn],y[maxn];float maps[maxn][maxn];int main(){    int t,cnt=0;    while(~scanf("%d",&t))    {        if(t==0)            break;        for(int i=1;i<=t;i++)        {            scanf("%f%f",&x[i],&y[i]);        }        for(int i=1;i<=t;i++)        {            for(int j=1;j<=t;j++)            {                maps[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));            }        }        for(int k=1;k<=t;k++)        {            for(int i=1;i<=t;i++)            {                for(int j=1;j<=t;j++)                {                    if(maps[i][j]>maps[i][k]&&maps[i][j]>maps[k][j])                    {                        if(maps[i][k]>maps[k][j])                        {                            maps[i][j]=maps[i][k];                        }                        else                        {                            maps[i][j]=maps[k][j];                        }                    }                }            }        }        printf("Scenario #%d\nFrog Distance = %.3f\n\n",++cnt,maps[1][2]);    }}



题意是找这样一条边              在从起点到终点的所有路径中,          找一条最大的一段路径(一段一段一段)          使这段路径最小。

弗洛伊德求两两之间的最短路。  每次更新maps【i】【j】为maps【i】【k】和maps【k】【j】中最大的          这样就会将一段路径中最大一条边存到  maps【i】【j】(即这段路径中)。

0 0