这个问题可以使用暴力法解决,即对于每一对点,计算它们之间的距离,然后找出最小的距离。

具体实现如下:

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    double minDistance = 1e9; // 初始化最小距离为一个很大的数
    
    double points[n][2]; // 存储每个点的坐标
    
    // 输入每个点的坐标
    for (int i = 0; i < n; i++) {
        cin >> points[i][0] >> points[i][1];
    }
    
    // 计算每一对点之间的距离
    for (int i = 0; i < n; i++) {
        for (int j = i+1; j < n; j++) {
            double distance = sqrt(pow(points[i][0]-points[j][0], 2) + pow(points[i][1]-points[j][1], 2));
            if (distance < minDistance) {
                minDistance = distance;
            }
        }
    }
    
    // 输出最短距离,保留4位小数
    cout << fixed << setprecision(4) << minDistance << endl;
    
    return 0;
}

该算法的时间复杂度为 O(n^2),其中 n 是点的个数。对于每一对点,都需要计算它们之间的距离,因此总共需要计算 n(n-1)/2 次距离

C++实现给定平面上 个点找出其中的一对点的距离使得在这 个点的所有点对中该距离为所有点对中最小的。输入第一行一个整数 表示点的个数。接下来 行每行两个整数 表示一个点的行坐标和列坐标。输出仅一行一个实数表示最短距离四舍五入保留 位小数。内存限制:256 MB时间限制:1000 S

原文地址: https://www.cveoy.top/t/topic/hSZE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录