gpt4 book ai didi

c++ - 合并每个包含 3 个元素的数组中彼此最接近的点

转载 作者:行者123 更新时间:2023-12-01 14:48:08 25 4
gpt4 key购买 nike

我正在实现一个简单的贪婪合并算法,该算法合并彼此最接近的两个点并平均它们的位置。在索引 i 和 j 处合并两个点后,我需要用这两个点的平均值替换其中一个,比如 i。然后,将数组中的最后一个点复制到另一个点上,比如说 j,之后我可以将数组大小减少 1,所有剩余的点都在新的缩小范围内。
我需要重复上面的步骤,直到只剩下3个代表点,每个代表一组合并点。我已经编写了以下代码,但我想它无法更新数组(pts)。如果有人能帮我找出错误,我将不胜感激。提前致谢。这是我的代码:-

void merge_point(Point pts[], int &size) {

double a;
int x, y;
Point d;

while(size != 3) {
double min = get_distance(pts[0],pts[1]);
for (int i = 0; i < size; i++) {
for (int j = i+1; j < size; j++) {
get_distance(pts[i], pts[j]);
if ((a = get_distance(pts[i],pts[j])) <= min) {
x = i;
y = j;
}
a = get_distance(pts[i],pts[j]);
}
}

d = mean_point(pts[x],pts[y]);
pts[x] = d;
pts[y] = pts[size-1];
size = size - 1;
}
}

当我输入输入数组时:-

3 8 2

5.7 7.2 2.2

10.83 6.48 2.42

20.577 5.832 2.662

39.0963 5.2488 2.9282

74.283 4.72392 3.22102

141.138 4.25153 3.54312

268.162 3.82638 3.89743

509.507 3.44374 4.28718

968.063 3.09936 4.7159

我的预期输出应该是:-

181.974 4.29686 3.57395

968.063 3.09936 4.7159

509.507 3.44374 4.28718

但是,我得到的输出是: ——

4.35 7.6 2.1

968.063 3.09936 4.7159

36.6506 5.8958 2.68145

最佳答案

认为我发现了问题,您不会在 cicle 中找到新的最小距离后立即更新最小距离,请尝试以下操作:

        cout << "distance between p[" << i << "] and " << "p[" << j << "]" << "is " << get_distance(pts[i], pts[j]) << '\n';

if ((a = get_distance(pts[i], pts[j])) <= min)
{
cout << "current min distance is between point[" << i << "]" << " and point[" << j << "]" << '\n';
min = a;
x = i;
y = j;
}

你必须添加这个指令:
min = a;

为了更新分钟。
否则它仅适用于某些边缘情况。

关于c++ - 合并每个包含 3 个元素的数组中彼此最接近的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61291111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com