| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 28112 | Accepted: 9136 |
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
Source
题意:两点之间所有路径中的最长边最短
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<string>
#include<algorithm>
#define INF 100000000
using namespace std;
double mp[205][205];
int n;
bool vis[205];
struct node
{
int x,y;
}e[205];
double dt(node a,node b)
{
return sqrt(double((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)));
}
void floyd()
{
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
mp[i][j]=mp[j][i]=dt(e[i],e[j]);
}
for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(mp[i][k]<mp[i][j]&&mp[k][j]<mp[i][j])
{
mp[i][j]=mp[j][i]=max(mp[i][k],mp[k][j]);
}
}
}
}
}
int main()
{
int cas=1;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
memset(mp,0,sizeof(mp));
for(int i=1;i<=n;i++)
{
scanf("%d%d",&e[i].x,&e[i].y);
}
floyd();
printf("Scenario #%d\n",cas++);
printf("Frog Distance = %.3f\n\n",mp[1][2]);
}
return 0;
}
原文:http://www.cnblogs.com/water-full/p/4467773.html