#include<cstdio>
#include<cstring>
#include<math.h>
#include<iostream>
using namespace std;
const int MAX=9999999;
/*
开始以为看懂题了,用dijkstra算法做的,GG
看了别人的解释发现求的是最大的跳的距离,以后读题要慢,要仔细,
英语战无渣
*/
int n;
float map[210][2], dis[210][210];
int main()
{
int cases=1;
memset(dis,0,sizeof(dis));
while(~scanf("%d",&n)&&n)
{
for(int i=1;i<=n;i++)
{
scanf("%f%f",&map[i][0],&map[i][1]);
}
for(int i=1;i<n;i++)
for (int j=i+1;j<=n;j++){
dis[i][j]=dis[j][i]=sqrt(pow(map[i][0]-map[j][0],2)+pow(map[i][1]-map[j][1],2));
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(dis[i][k]<dis[i][j] && dis[k][j]<dis[i][j]) //当边ik,kj的权值都小于ij时,则走i->k->j路线,否则走i->j路线
if(dis[i][k]<dis[k][j]) //当走i->k->j路线时,选择max{ik,kj},只有选择最大跳才能保证连通
dis[i][j]=dis[j][i]=dis[k][j];
else
dis[i][j]=dis[j][i]=dis[i][k];
}
cout<<"Scenario #"<<cases++<<endl;
printf("Frog Distance = %.3f\n\n",dis[1][2]);
}
return 0;
}
poj 2253 Frogger
最新推荐文章于 2021-08-17 00:16:13 发布