Frogger
题意:
1.无论你跳多远跳多少次 这些都不限制你 也无论点有多远 都能跳到
2.每条从点1到点2的路径中,跳的最大那一步为这条路径的代价
3.求出最小代价的路径。
ps:我看了N就没看明白,最后看了discuss后才明白。
View Code
 1 #include<iostream>
 2 #include<string>
 3 #include<queue>
 4 #include<map>
 5 #include<cmath>
 6 #include<stack>
 7 #include<algorithm>
 8 using namespace std;
 9 const int N=222;
10 int coord[N][2];
11 int str[N][N];
12 #define dis(j,i) ((coord[i][0]-coord[j][0])*(coord[i][0]-coord[j][0])+(coord[i][1]-coord[j][1])*(coord[i][1]-coord[j][1]))
13 
14 int main()
15 {
16     int n,i,j,k,tmp,Case=0;
17 
18     while(scanf("%d",&n),n){
19         for(i=0;i<n;i++){
20             scanf("%d%d",&coord[i][0],&coord[i][1]);
21             for(int j=0;j<i;j++){
22                 str[i][j]=str[j][i]=dis(j,i);
23             }
24         }
25 
26             for(k=0;k<n;k++)
27             for(i=0;i<n;i++){
28                 if(i==k)continue;
29                 for(j=0;j<n;j++){
30                     if(j==i || j==k)continue;
31                     
32                     if(str[i][k]>str[k][j])tmp=str[i][k];
33                     else tmp=str[k][j];
34                     
35                     if(str[i][j]>tmp){
36                         str[i][j]=tmp;
37                     }
38                 }
39             }
40         
41         if(Case)puts("");
42         printf("Scenario #%d\n",++Case);
43         printf("Frog Distance = %.3f\n",sqrt(str[0][1]*1.0));
44     }
45     return 0;
46 }
posted on 2012-07-30 16:20  tiankonguse  阅读(345)  评论(0编辑  收藏  举报