poj 2253 Frogger (最短路Floyd)
wrong了2次,因为没读懂题!!
唉, 英语好差啊!!
题目大意:
给出两只青蛙的坐标A、B,和其他的n-2个坐标,任一两个坐标点间都是双向连通的。显然从A到B存在至少一条的通路,每一条通路的元素都是这条通路中前后两个点的距离,这些距离中又有一个最大距离。题目要求,必须借助第三块石头!!求出最短总路径中的最大权值
现在要求求出所有通路的最大距离,并把这些最大距离作比较,把最小的一个最大距离作为青蛙的最小跳远距离。
#include"stdio.h"
#include"math.h"
#define INF 99999999
double map[201][201];
int main()
{
int n,i,j,k,cnt;
int x[201],y[201];
double t;
cnt=0;
while(scanf("%d",&n)!=-1&&n)
{
for(i=0;i<n;i++)
scanf("%d%d",&x[i],&y[i]);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
map[i][j]=(i==j?0:INF);
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
map[i][j]=map[j][i]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
for(k=0;k<n;k++)
{
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
{
if(map[i][k]<map[i][j]&&map[k][j]<map[i][j])//当ik,kj都小于ij时,才可能借助第三块石头走过
if(map[i][k]<map[k][j])//求出最短总路径中的最大权值!
map[i][j]=map[j][i]=map[k][j];
else
map[i][j]=map[j][i]=map[i][k];
}
}
cnt++;
printf("Scenario #%d\n",cnt);
printf("Frog Distance = %.3f\n\n",map[0][1]);
}
return 0;
}
浙公网安备 33010602011771号