D - Frogger (最短路)
题意:求1到n所有路径的最大值中最小必要值。
思路:
AC代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#include<cmath>
#include<algorithm>
using namespace std;
double f[205][205];
struct p{
double x,y;
}a[205];
double fun(int i,int j){ //求距离
return hypot((a[i].x-a[j].x),(a[i].y-a[j].y));
}
int main(){
int n,k=0;
while(~scanf("%d",&n)&&n){
for(int i=1;i<=n;i++) scanf("%lf%lf",&a[i].x,&a[i].y);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(i==j) f[i][j]=0;
else f[i][j]=fun(i,j);
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
if(f[i][k])
for(int j=1;j<=n;j++)
{
if(f[i][j]>max(f[i][k],f[k][j]))
{
f[i][j]=max(f[i][k],f[k][j]);
}
}
printf("Scenario #%d\nFrog Distance = %.3f\n",++k,f[1][2]);//G++用%.f C++ %.lf %f都可.
puts("");
}
return 0;
}