题意:湖中以许多石头,其中一块石头上有一只青蛙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; }