您的位置:首页 > 其它

ZOJ 1924 Frogger

2014-03-06 20:44 337 查看
一条路径中,点到点之间最大的长度。求所有路径中最小的那个

#include<iostream>
#include<cstdio>
#include<cmath>
#include<string.h>
using namespace std;

const int N=205;
int x
,y
,visit
;
double mp

,d
;
double dist(int i,int j){
double rst=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
return sqrt(1.0*rst);
}

double dijkstra(int n){
double rst=0;
memset(visit,0,sizeof visit);
for(int i=1;i<n;i++){
d[i]=mp[0][i];
//printf("%lf %lf\n",d[i],mp[0][i]);
}
visit[0]=1;
for(int p=1;p<n;p++){
int tmin=1e9,loc;
for(int i=0;i<n;i++){
if(!visit[i]&&d[i]<tmin)
tmin=d[i],loc=i;
}
visit[loc]=1;
//printf("d[%d]=%.lf\n",loc,d[loc]);
rst=max(rst,d[loc]);
if(loc==1)
return rst;
for(int i=0;i<n;i++){
if(visit[i]) continue;
if(mp[loc][i]<d[i])
d[i]=mp[loc][i];
}
}
}

int main(){
int n,cases=1;
while(cin>>n&&n){
for(int i=0;i<n;i++)
scanf("%d %d",&x[i],&y[i]);
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
mp[i][j]=mp[j][i]=dist(i,j);
printf("Scenario #%d\n",cases++);
printf("Frog Distance = %.3lf\n\n",dijkstra(n));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: