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

 

posted @ 2013-08-12 20:22  null1019  阅读(241)  评论(0编辑  收藏  举报