暴力法
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int main() {
void function(int a[10][2], int length);
srand((unsigned)time(NULL)); // 初始化随机数种子
int a[10][2]; //以10个点为例,第一列为横坐标、第二列为纵坐标
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 2; j++) {
a[i][j] = rand() % 100; // 生成100以内的坐标点
}
}
for (int i = 0; i < 10; i++) {
printf("第%d个点:", i + 1);
for (int j = 0; j < 2; j++) {
printf("%d", a[i][j]);
if (j == 0) {
printf(",");
}
}
printf("\n");
}
int length = sizeof(a) / sizeof(a[0]); //点的个数
function(a, length);
return 0;
}
void function(int a[10][2], int length) {
double min = sqrt(pow(a[0][0] - a[1][0], 2) + pow(a[0][1] - a[1][1], 2));//最短距离
int m = 0; //最近点对:m和n
int n = 0;
for (int i = 0; i < length; i++) {
for (int j = i + 1; j < length; j++) {
double temp = sqrt(pow(a[i][0] - a[j][0], 2) + pow(a[i][1] - a[j][1], 2));//两点间距离
if (temp<min) {
min = temp;
m = i;
n = j;
}
}
}
printf("最近的一对点是%d,%d,它们的距离是%.2f\n", m + 1, n + 1, min);
}