poj2253 题解

链接:poj2253

3
17 4
19 4
18 5

0

Sample Output

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<queue>
#include<algorithm>
#define rep(i,x,y) for(register int i=x;i<=y;++i)
#define repd(i,x,y) for(register int i=x;i>=y;--i)
#define ll long long
using namespace std;
typedef pair<double,int> l;
const int N=507;
double g[N][N],dis[N];
int vis[N],x[N],y[N],n,cnt;
priority_queue<l,vector<l>,greater<l> >q;

double (int a,int b){
return sqrt(pow((double)x[a]-x[b],2)+pow((double)y[a]-y[b],2));
}

double dijkstra(int s,int t){
while(!q.empty())q.pop();
memset(vis,0,sizeof(vis));
rep(i,1,n)dis[i]=0x3f3f3f3f;
q.push(l(dis[s]=0,s));
while(!q.empty()){
int k=q.top().second;
q.pop();
vis[k]=1;
rep(i,1,n)if(max(dis[k],g[k][i])<dis[i]){
dis[i]=max(dis[k],g[k][i]);
if(!vis[i])q.push(l(dis[i],i));
}
}
return dis[t];
}

int main(){
while(~scanf("%d",&n)&&n){
rep(i,1,n)scanf("%d%d",&x[i],&y[i]);
rep(i,1,n)rep(j,1,i-1)g[i][j]=g[j][i]=len(i,j);
printf("Scenario #%dnFrog Distance = %.3lfnn",++cnt,dijkstra(1,2));
}
return 0;
}