1. 程式人生 > >swustoj最近對問題(0794)

swustoj最近對問題(0794)

設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為小數。

Output
1 2 3 4 5 6 7 8 2 2 0 0 0 1 3 0 0 1 1 1 0
Sample Input
1 2 1.0000 1.0000
Sample Output
#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;
}