swustoj最近對問題(0794)
阿新 • • 發佈:2019-01-05
設p1=(x1, y1), p2=(x2, y2), …, pn=(xn, yn)是平面上n個點構成的集合S,設計演算法找出集合S中距離最近的點對。
Description多組測試資料,第一行為測試資料組數n(0<n≤100),每組測試資料由兩個部分構成,第一部分為一個點的個數m(0<m≤1000),緊接著是m行,每行為一個點的座標x和y,用空格隔開,(0<x,y≤100000)
Input每組測試資料輸出一行,為該組資料最近點的距離,保留4為小數。
Output1 2 3 4 5 6 7 8 | 2 2 0 0 0 1 3 0 0 1 1 1 0 |
1 2 | 1.0000 1.0000 |
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include<stack> #include<iostream> #include<string.h> #include<math.h> using namespace std; struct node { double x, y; }; node ss[1000000]; int main() { int t; cin >> t; while (t--) { int n; node s[1005]; cin >> n; for (int i = 0; i < n; i++) { cin >> s[i].x >> s[i].y; } int k = 0; double ans = 99999999.0; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { ans = min(ans, sqrt(pow(s[i].x - s[j].x, 2) + pow(s[i].y - s[j].y, 2))); } } printf("%.4lf\n", ans); } return 0; }