#mxdx001. 最近的两个点

最近的两个点

mxdx001. 最近的两个点

题目描述

给定平面上的 nn 个点。请设计一个表示点的类,使每个点对象封装自己的坐标,并提供一个成员函数,用于计算当前点与另一个点之间的欧几里得距离。类的名称、成员变量和公开接口均由解答自行设计。

请计算所有不同点对之间距离的最小值。

提交一个完整的 C++20 程序,并自行编写 main 处理标准输入和标准输出。

距离计算应遵循公式:

(x1x2)2+(y1y2)2\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}

用于计算距离的成员函数只负责返回计算结果,不输出任何内容;其名称、参数形式和返回类型由解答自行设计。

输入格式

第一行包含一个整数 nn,表示点的数量。

接下来 nn 行,每行包含两个整数 xix_iyiy_i,表示第 ii 个点的坐标。

输出格式

输出一行一个实数,表示任意两个不同点之间最小的欧几里得距离,四舍五入后保留 33 位小数。

数据范围

  • 2n2002 \le n \le 200
  • 104xi,yi104-10^4 \le x_i,y_i \le 10^4
  • 点的编号不同即可视为不同的点;两个点可以拥有完全相同的坐标

本题不考察算法优化,直接枚举所有点对即可通过。

示例 1

3
0 0
3 4
3 0
3.000

三对点之间的距离分别为 554433,因此最小距离为 33

示例 2

4
-1 -1
5 5
2 2
-1 -1
0.000

11 个点和第 44 个点的坐标相同,因此它们之间的距离为 00

说明

  • 本题允许使用 std::hypot 或根据距离公式自行计算。
  • 坐标差的平方应使用足够宽的整数类型计算,避免 int 溢出。
  • 任意两个不同编号的点都可以组成点对。