C语言求解最近点对问题 - 算法实现与代码解析
下面是一个解决最近点对问题的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坐标。接下来,它使用两层循环来比较每对点之间的距离,找到最小的距离。最后,它输出计算得到的最近的一对点的距离,保留两位有效数字。
原文地址: https://www.cveoy.top/t/topic/PR6 著作权归作者所有。请勿转载和采集!