下面是一个解决最近点对问题的C语言代码示例:

#include <stdio.h>
#include <math.h>

// 计算两个点之间的距离
double distance(int x1, int y1, int x2, int y2) {
    int dx = x2 - x1;
    int dy = y2 - y1;
    
    return sqrt(dx*dx + dy*dy);
}

int main() {
    int n;
    
    // 读取输入的数字
    while (scanf('%d', &n) != EOF) {
        int x[n], y[n];
        
        // 读取坐标点
        for (int i = 0; i < n; i++) {
            scanf('%d %d', &x[i], &y[i]);
        }
        
        double minDistance = distance(x[0], y[0], x[1], y[1]);
        
        // 计算最近的一对点的距离
        for (int i = 0; i < n-1; i++) {
            for (int j = i+1; j < n; j++) {
                double d = distance(x[i], y[i], x[j], y[j]);
                if (d < minDistance) {
                    minDistance = d;
                }
            }
        }
        
        // 输出结果,保留两位有效数字
        printf('%.2lf\n', minDistance);
    }
    
    return 0;
}

这段代码首先定义了一个函数distance,用于计算两个点之间的距离,根据勾股定理计算两点间的直线距离。然后,在main函数中,它读取输入的数字,然后读取每个坐标点的x和y坐标。接下来,它使用两层循环来比较每对点之间的距离,找到最小的距离。最后,它输出计算得到的最近的一对点的距离,保留两位有效数字。

C语言求解最近点对问题 - 算法实现与代码解析

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

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