gpt4 book ai didi

C++ 标记 3D 对象数组中的连续部分

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:33:43 27 4
gpt4 key购买 nike

如果我们有一个 3x3x3 的对象数组,它包含两个成员:一个 bool 值和一个整数;谁能建议一种基于 bool 值将此数组标记为连续 block 的有效方法。例如,如果我们将它描绘成一个 Rubix 立方体,并且缺少中间切片(1,x,x == false 上的所有内容),我们是否可以通过唯一的组标识符将两个外部切片标记为单独的组int 成员。

如果“切片”经过 90 度,留下 L 形和 strip ,则同样需要应用。

可以使用递归来处理非常大的 3D 数组吗?可以线程吗。

到目前为止,我已经打字好几次了,但都陷入了一些死胡同和堆栈溢出。

非常感谢任何帮助,谢谢。

最佳答案

可以这样做:

struct A {int m_i; bool m_b;};
enum {ELimit = 3};
int neighbour_offsets_positive[3] = {1, ELimit, ELimit*ELimit};

A cube[ELimit][ELimit][ELimit];
A * first = &cube[0][0][0];
A * last = &cube[ELimit-1][ELimit-1][ELimit-1];

// Init 'cube'.
for(A * it = first; it <= last; ++it)
it->m_i = 0, it->m_b = true;

// Slice.
for(int i = 0; i != ELimit; ++i)
for(int j = 0; j != ELimit; ++j)
cube[1][i][j].m_b = false;

// Assign unique ids to coherent parts.
int id = 0;
for(A * it = first; it <= last; ++it)
{
if (it->m_b == false)
continue;
if (it->m_i == 0)
it->m_i = ++id;
for (int k = 0; k != 3; ++k)
{
A * neighbour = it + neighbour_offsets_positive[k];
if (neighbour <= last)
if (neighbour->m_b == true)
neighbour->m_i = it->m_i;
}
}

关于C++ 标记 3D 对象数组中的连续部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8551017/

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