因此,对于数据结构赋值,我必须使用随机选择的五种颜色之一初始化静态分配的3D数组中的每个元素。该数组的类型为ColorEnum,声明如下:
枚举ColorEnum {RED,ORANGE,YELLOW,GREEN,BLUE};
我的任务是找到构成特定元素序列的元素的索引(意味着序列中的每个元素逻辑上接触序列中的下一个元素,无论是左右,上下,还是前面背部)。一个完整的序列将是一个RED元素触及一个ORANGE元素的序列,该元素触摸一个黄色元素,该元素触摸一个接触蓝色元素的GREEN元素。要接触,两个元素的整个边必须相邻,而不仅仅是边缘或角落。因此每个元素最多可触及6个其他元素。单个元素可以用于多个序列。为了在序列中存储元素的索引,我使用静态分配的1D结构数组,它将保存元素的行,列和深度索引。为了存储每个序列,我使用另一个静态分配的数组1D数组,它们保存序列中元素的索引。回答我的问题,为了尽可能少地使用内存,我需要知道分配给数组数组的大小。我希望这个大小等于这些RED,ORANGE,YELLOW,GREEN,BLUE序列的最大数量,但我不知道如何确定这个数字。那里的任何数学天才都想关心我吗?我的任务很久就完成了。我得到了一个94/100,但这个问题让我烦恼。我很感激帮助。
答案 0 :(得分:0)
可能序列的最大数量取决于3D阵列的尺寸以及(当然)网格的填充。从组合角度看它,我会尝试找到这种3D网格最有效的填充。但是,分配最大值是假设最坏的情况,你会更好地使用@Kevin评论的向量。
对我来说似乎有效的网格的一个填充是填充1个块的6个相邻位置,其中3个以前的颜色和3个下一个颜色(因此黄色块将具有3个橙色和3个绿色块作为邻居)。如果使用下一种颜色填充(后,右,上)邻居,使用前一种颜色填充(前,左,下)邻居,则新兴结构允许在许多序列中使用1个块。如果颜色没有下一个/上一个颜色,只有前一个/下一个颜色。
在2D中你会有这样的东西(缩写为颜色名)
BGYOROYGBGYOROYGB
GBGYOROYGBGYOROYG
YGBGYOROYGBGYOROY
OYGBGYOROYGBGYORO
ROYGBGYOROYGBGYOR
使用左下R的序列数是2 ^ 4,使用中间R之一(在无限域中)的序列数是2 ^ 5。然后可以针对该模式计算3D场中的序列的精确总nr,同时考虑边界(并且可能在边缘处具有不同的方案,因为将存在一些损失)
我的填充方法只是填充网格的一种方式,存在其他可能性,甚至可能更好。