B

 1 #include<cstdio>
 2 #include<queue>
 3 #include<cmath>
 4 #include<climits>
 5 using namespace std;
 6 
 7 const int maxn = 205;
 8 double a[205][205],dis[205];
 9 int vis[205];
10 
11 double max(double a,double b)
12 {
13     return a>b?a:b;
14 }
15 
16 void SPFA(int n)
17 {
18     queue<int> q;
19     int i,j;
20     for(i=2;i<=n;i++){
21         dis[i]=INT_MAX;
22         vis[i]=0;
23     }
24     dis[1]=0;
25     q.push(1);
26     vis[1]=1;
27     while(!q.empty()){
28         i=q.front();
29         q.pop();
30         vis[i]=0;
31         for(j=1;j<=n;j++)
32             if(dis[j]>max(dis[i],a[i][j])){
33                 dis[j]=max(dis[i],a[i][j]);
34                 if(!vis[j]){
35                     q.push(j);
36                     vis[j]=1;
37                 }
38             }
39     }
40 }
41 int main()
42 {
43     int i,j,n,k=0,x[205],y[205];
44     while(~scanf("%d",&n)){
45         if(n==0)
46             break;
47         k++;
48         printf("Scenario #%d
",k);
49         for(i=1;i<=n;i++)
50             scanf("%d%d",&x[i],&y[i]);
51         for(i=1;i<=n;i++)
52             for(j=1;j<=i;j++)
53                 a[i][j]=a[j][i]=sqrt(double(x[i]-x[j])*(x[i]-x[j])+double(y[i]-y[j])*(y[i]-y[j]));
54         SPFA(n);
55         printf("Frog Distance = %.3lf

",dis[2]);
56     }
57     return 0;
58 }
原文地址:https://www.cnblogs.com/ouyang_wsgwz/p/9012725.html