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; }