Frogger

http://poj.org/problem?id=2253

 1 #include<cstdio>

 2 #include<cstring>

 3 #include<cmath>

 4 #include<algorithm>

 5 #define MAXN 210

 6 const int INF=1<<28;

 7 using namespace std;

 8 int n;

 9 double dis[MAXN][MAXN];

10 struct node

11 {

12     double x,y;

13 }p[MAXN];

14 void init()

15 {

16     for(int i=0;i<n;i++)

17     {

18         for(int j=0;j<n;j++)

19         {

20             dis[i][j]=dis[j][i]=INF;

21         }

22     }

23 }

24 int main()

25 {

26     int t=0;

27     while(scanf("%d",&n)&&n){

28         init();t++;

29        for(int i=0;i<n;i++)

30        {

31            scanf("%lf%lf",&p[i].x,&p[i].y);

32        }

33        for(int i=0;i<n;i++)

34        {

35            for(int j=0;j<n;j++)

36            {

37                dis[i][j]=(double)sqrt((p[i].x-p[j].x)*(p[i].x-p[j].x)+(p[i].y-p[j].y)*(p[i].y-p[j].y));

38            }

39        }

40        for(int k=0;k<n;k++)

41        {

42            for(int i=0;i<n;i++)

43            {

44                for(int j=0;j<n;j++)

45                {

46 

47                    if(dis[i][j]>max(dis[i][k],dis[k][j]))

48                    {

49                        dis[i][j]=max(dis[i][k],dis[k][j]);

50                    }

51 

52                }

53            }

54        }

55        printf("Scenario #%d\n",t);

56        printf("Frog Distance = %.3f\n",dis[0][1]);

57        printf("\n");

58     }

59     return 0;

60 }
View Code

也可以把上述的循环里面的换成这个:

1 if(dis[i][k]<dis[i][j]&&dis[k][j]<dis[i][j])

2                    {

3                        if(dis[i][k]<dis[k][j])

4                        {

5                            dis[i][j]=dis[j][i]=dis[k][j];

6                        }

7                        else

8                        dis[i][j]=dis[j][i]=dis[i][k];

9                    }
View Code

 

你可能感兴趣的:(r)