现在的位置: 首页 > 综合 > 正文

POJ 2253 Frogger Floyd

2013年08月14日 ⁄ 综合 ⁄ 共 748字 ⁄ 字号 评论关闭

题意:湖中以许多石头,其中一块石头上有一只青蛙Freddy, 他想通过在石头上跳跃去拜访另一只青蛙Fiona。求Freddy至少要能跳多远才能到达Fiona所在的石头。(Freddy在石头1上,Fiona在石头2上)
题解:

#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;

struct
{
	double x, y;
} stone[201];

double d[201][201];
int n,t = 0;

void Floyd ()
{
	int i,j,k;
	double temp;
	for ( k = 1; k <= n; k++ )
	{
		for ( i = 1; i <= n; i++ )
			for ( j = i; j <= n; j++ )
			{
				temp = d[i][k] > d[k][j] ? d[i][k] : d[k][j];
				if ( temp < d[i][j] )
					d[i][j] = d[j][i] = temp;
			}
	}
}

int main()
{
	int Case = 0;
	while ( cin >> n && n )
	{
		int i,j;
		for ( i = 1; i <= n; i++ )
			cin >> stone[i].x >> stone[i].y;

		for ( i = 1; i <= n; i++ )
		{
			for ( j = i; j <= n; j++ )
				d[i][j] = d[j][i] = sqrt( (stone[i].x-stone[j].x)*(stone[i].x-stone[j].x) + (stone[i].y-stone[j].y)*(stone[i].y-stone[j].y) );
		}

		Floyd ();
		cout << setprecision(3) << fixed;
		cout << "Scenario #" << ++Case << "\nFrog Distance = " << d[1][2] << "\n\n";
	}
	return 0;
}

抱歉!评论已关闭.