从 点 1 到点 2 有多条路径,每条路径有个 最远跳跃距离,问这些最远跳跃距离中 最小的值是多少
Code
#include <cmath>
#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<int,int> PII;
const int N=310;
PII p[N];
bool st[N];
double dist[N];
double g[N][N];
int n;
int pf(int x){
return x*x;
}
double spfa(){
for(int i=1;i<=n;i++) dist[i]=1e9;
memset(st,false,sizeof st);
dist[1]=0;
queue<int>q;
q.push(1);
st[1]=true;
while(q.size()){
int t=q.front();
q.pop();
st[t]=false;
for(int i=1;i<=n;i++)
if(dist[i]>max(dist[t],g[t][i])){
dist[i]=min(dist[i],max(dist[t],g[t][i]));
if(!st[i]) st[i]=true,q.push(i);
}
}
return dist[2];
}
int main(){
int t=1;
while(cin>>n&&n){
for(int i=1;i<=n;i++) cin>>p[i].first>>p[i].second;
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) {
int x1=p[i].first,y1=p[i].second;
int x2=p[j].first,y2=p[j].second;
g[i][j]=g[j][i]=sqrt(pf(x1-x2)+pf(y1-y2));
}
cout<<"Scenario #"<<t<<endl;
printf("Frog Distance = %.3f\n\n",spfa());
t++;
}
return 0;
}