C++快速一组点按参考点距离分组
时间: 2023-06-01 08:03:32 浏览: 61
以下是一个C语言的示例代码,用于将一组点按照它们与参考点的距离分成不同的组:
```c
#include <stdio.h>
#include <math.h>
#define MAX_POINTS 100
#define MAX_GROUPS 10
struct Point {
int x;
int y;
};
double distance(struct Point p1, struct Point p2) {
return sqrt(pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2));
}
int main() {
struct Point points[MAX_POINTS];
int num_points;
struct Point reference_point;
int num_groups;
double distances[MAX_POINTS];
int groups[MAX_GROUPS][MAX_POINTS];
int num_points_in_group[MAX_GROUPS] = {0};
// 读取输入
printf("请输入点的数目:");
scanf("%d", &num_points);
printf("请输入所有的点:\n");
for (int i = 0; i < num_points; i++) {
printf("点 %d:", i + 1);
scanf("%d %d", &points[i].x, &points[i].y);
}
printf("请输入参考点:");
scanf("%d %d", &reference_point.x, &reference_point.y);
printf("请输入要分成的组数:");
scanf("%d", &num_groups);
// 计算每个点与参考点的距离
for (int i = 0; i < num_points; i++) {
distances[i] = distance(points[i], reference_point);
}
// 将每个点分到对应的组中
for (int i = 0; i < num_points; i++) {
int group_index = (int)(distances[i] / (1.0 / num_groups));
if (group_index >= num_groups) {
group_index = num_groups - 1;
}
groups[group_index][num_points_in_group[group_index]] = i;
num_points_in_group[group_index]++;
}
// 输出结果
for (int i = 0; i < num_groups; i++) {
printf("第 %d 组:", i + 1);
for (int j = 0; j < num_points_in_group[i]; j++) {
printf("%d ", groups[i][j]);
}
printf("\n");
}
return 0;
}
```
这个程序中,首先读取输入的点数、所有的点、参考点以及要分成的组数。然后,计算每个点与参考点的距离,并将每个点分到对应的组中。最后,输出每个组中包含的点的索引。注意,这个程序中假设了点的数目不超过100,分成的组数不超过10。如果需要处理更多的点或者分更多的组,可以将这些常量的值增大。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)