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

		



原文地址:https://www.cnblogs.com/yyf573462811/p/6365299.html