给定直线上n个点,找其中的一对点,使得在n个点的所有点对中,该点对的距离最小c语言代码
时间: 2024-03-21 13:40:20 浏览: 87
C 代码 实现弗洛伊德算法以查找最短距离 在有向图上的节点对之间.rar
以下是一个简单的C语言代码实现,可以解决您的问题:
```c
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <math.h>
int main() {
char points_str[100];
printf("请输入一组用逗号分隔的整数,表示直线上的点的位置:");
scanf("%s", points_str);
int points[100];
int num_points = 0;
char *p = strtok(points_str, ",");
while (p != NULL) {
points[num_points++] = atoi(p);
p = strtok(NULL, ",");
}
// 将点按位置从小到大排序
qsort(points, num_points, sizeof(int), cmpfunc);
int min_dist = INT_MAX; // 初始最小距离为整型最大值
int min_pair[2]; // 初始最小距离对为 NULL
for (int i = 0; i < num_points - 1; i++) {
for (int j = i+1; j < num_points; j++) {
int dist = abs(points[i] - points[j]);
if (dist < min_dist) {
min_dist = dist;
min_pair[0] = points[i];
min_pair[1] = points[j];
}
}
}
printf("距离最小的点对是:(%d, %d)\n", min_pair[0], min_pair[1]);
}
// 快速排序比较函数
int cmpfunc(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
```
该代码的基本思路是,先将直线上的点按照位置从小到大排序,然后遍历所有点对,计算它们之间的距离,找到距离最小的点对。最后输出距离最小的点对即可。
需要注意的是,由于C语言不支持动态数组,因此我们需要在代码中手动指定一个足够大的数组大小,以存储输入的所有点。此外,我们还需要使用快速排序算法对点进行排序。
阅读全文