我能说这个水到极点了么。。。2A。。第一次CE了~
求最短距离,改成求最大距离。
为毛我觉得图论比数学好玩多了!我这土八路慢慢得改成正规军了~
#include <iostream> #include <algorithm> #include <iomanip> #include <math.h> using namespace std; struct point{ double x, y; }p[205]; double dis[205][205]; int main() { int n; int countt = 1; while (cin >> n && n) { cout << "Scenario #" << countt++ << endl; memset(p, 0, sizeof(p)); memset(dis, 0, sizeof(dis)); for (int i = 1; i <= n; i++) { cin >> p[i].x >> p[i].y; } for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { double x = p[i].x - p[j].x; double y = p[i].y - p[j].y; dis[i][j] = dis[j][i] = sqrt(x * x + y * y); } } for (int k = 1; k <= n; k++) { for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (dis[i][j] > max(dis[i][k], dis[k][j])) {//如果i到j的距离,大于i到k或j到k的距离,就把i到j的距离改为他们之中大的。就是始终求各个点间的最大距离 dis[i][j] = max(dis[i][k], dis[k][j]); } } } } cout << "Frog Distance = " << fixed << setprecision(3) << dis[1][2] << endl << endl; } } |