題意:湖中以許多石頭,其中一塊石頭上有一隻青蛙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;}