所以对于数据结构赋值,我必须用随机选择的五种颜色中的一种初始化静态分配的3D数组中的每个元素。该数组的类型为colrenum,其声明如下:
enum colrenum {RED, ORANGE, YELLOW, GREEN, BLUE};
我的任务是找到组成特定元素序列的元素的索引(这意味着序列中的每个元素在逻辑上都与序列中的下一个元素相邻,从左到右,从上到下,或从前到后)。一个完整的序列应该是红色元素接触到橙色元素,橙色元素接触到黄色元素,黄色元素接触到绿色元素,绿色元素接触到蓝色元素。为了达到接触,两个元素的整个侧面必须相邻,而不仅仅是一个边缘或角落。所以每个元素最多可以接触6个其他元素。单个元素可以在多个序列中使用。为了在序列中存储元素的索引,我使用了一个静态分配的1D结构数组,它将保存元素的行、列和深度索引。为了存储每个序列,我使用了另一个静态分配的1D数组,该数组保存序列中元素的索引。回到我的问题,为了使用尽可能少的内存,我需要知道分配给数组的数组的大小。我希望这个大小等于这些RED, ORANGE, YELLOW, GREEN, BLUE序列的最大数量,但我不知道如何确定这个数字。有数学天才愿意帮我一把吗?我的任务早就完成了。我得了94/100,但这个问题一直困扰着我。谢谢你的帮助。
可能序列的最大数量将取决于您的3D数组的尺寸和(当然)网格的填充。从组合的角度来看,我会尝试找到这种3D网格的最有效填充。然而,分配最大值是假设最坏的情况,你会更好地使用向量,正如@Kevin评论的。
在我看来有效的一种填充网格的方法是用3个之前的颜色和3个之后的颜色填充1块的6个相邻位置(所以一个黄色块将有3个橙色和3个绿色块作为邻居)。如果你用下一种颜色填充(后、右、上)邻居,用前一种颜色填充(前、左、下)邻居,那么新出现的结构就允许在许多序列中使用一个块。如果一种颜色没有下一种/下一种颜色,则只有上一种/下一种颜色。
在2D中,你可以这样写(缩写的colornames)
BGYOROYGBGYOROYGB
GBGYOROYGBGYOROYG
YGBGYOROYGBGYOROY
OYGBGYOROYGBGYORO
ROYGBGYOROYGBGYOR
使用左下角R的序列的数量是2^4,使用中间R的序列的数量是2^5(在无限域中)。然后可以为这种模式计算3D域中序列的确切总nr,考虑到边界(可能在边缘处采用不同的方案,因为会有一些损失)
我的填充方法只是填充网格的一种方法,还有其他可能甚至更好的方法