如果我们有一个3x3x3的对象数组,其中包含两个成员: bool 值和整数;任何人都可以根据 bool 值提出一种有效的方法将此数组标记为连续的块。
例如,如果我们将其描绘为Rubix多维数据集,并且缺少中间切片(1,x,x == false上的所有内容),我们可以通过使用上的唯一组标识符将两个外部切片标记为单独的组int成员。
如果“切片”经过90度,则留下L形和条状,则同样需要应用。
是否可以使用递归对超大型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;
}
}