| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 24618 | Accepted: 7992 |
Description
Input
Output
Sample Input
2 0 0 3 4 3 17 4 19 4 18 5 0
Sample Output
Scenario #1 Frog Distance = 5.000 Scenario #2 Frog Distance = 1.414
最短路径的变形。
AC代码如下:
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
using namespace std;
double max(double a,double b)
{
return a>b?a:b;
}
int main()
{
int n,b;
int i,j,cas=0;
double x[505],y[505],sx,sy,ex,ey,w[505][505],d[505],vis[505];
while(cin>>n,n)
{
cas++;
double ans;
for(i=0;i<n;i++)
{
cin>>x[i]>>y[i];
}
for(i=0;i<n;i++)
for(j=0;j<=i;j++)
{
w[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
w[j][i]=w[i][j];
}
memset(vis , 0, sizeof vis);
for(i=0;i<n;i++)
{
if(i==0)
d[i]=0;
else d[i]=0xffffffff;
}
for(i=0;i<n;i++)
{
int a;double m=0xffffffff;
for(j=0;j<n;j++)
if(!vis[j]&&d[j]<m)
{m=d[j];a=j;}
vis[a]=1;
if(a==1)
break;
for(j=0;j<n;j++)
{
ans=sqrt((x[a]-x[j])*(x[a]-x[j])+(y[a]-y[j])*(y[a]-y[j]));
if(!vis[j]&& d[j]>max(d[a],ans))
{
d[j]=max(d[a],ans);
}
}
}
printf("Scenario #%d\nFrog Distance = %.3f\n\n",cas,d[1]);
}
return 0;
}
POJ 2253 Frogger,布布扣,bubuko.com
原文地址:http://blog.csdn.net/hanhai768/article/details/37596711