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 }
也可以把上述的循环里面的换成这个:
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 }