在二维数组中分配数字集而不相邻的算法

艾哈迈德·莫辛(Ahmed Mohsin)

我想要算法在已知尺寸的2D大数组中分配一组(0,1 ... 15)之类的数字,而不让该数字本身像下面这样:

0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 0  1  2  3  4  5  6  7

3  4  5  6  7  8  9  10 11 12 13 14 15 0  1  2  3  4  5  6  7  8  9  10

6  7  8  9  10 11 12 13 14 15 0  1  2  3  4  5  6  7  8  9  10 11 12 13

如果您寻找任何数字,您将永远不会看到它在任何方向上相邻?

阿拉拉

我将描述一种算法,该算法可以满足您的需求。

  1. 首先取原始数字数组,然后将其拆分为大约大小相等的4个数组(在您的示例中,它看起来像(0,1,2,3),(4,5,6,7), (8,9,10,11),(12,13,14,15)如果可以的话)。标明这些子阵列arr1arr2arr3arr4,分别。

  2. 现在,要填充数组,请按以下方式填充行:如果该行的索引为偶数(零,第二,第四等),则使用的radnom数填充该行中的第一个元素arr1,否则,该行的索引为奇数,用第二个数字填充该行arr3然后,使用前一个之后的随机数填充数组的下一个元素arr例如,如果行的第一个元素是从数量arr1,那么该行的下一个元素将是一个元素arr2,然后从以下arr3,然后arr4,再回到arr1等等就是这样。

它为什么起作用:如果您想知道为什么它起作用,请首先将2d数组视为图形。包括对角线在内的2d数组成为色数为4的图形,这意味着它需要4个唯一元素color这些颜色基本上是arr1...,arr4所以,所以用arr's'的数字填充图形时,我们实际上是在给图形“着色”。

要查看图形的颜色,请考虑使用4x4数组。它可以是四种颜色,例如:

[[ 1 , 2 , 3 , 4 ],
 [ 3 , 4 , 1 , 2 ],
 [ 1 , 2 , 3 , 4 ],
 [ 3 , 4 , 1 , 2 ]] 

请注意,这与上面的算法类似,但是它不是数字1-4,而是从数组arr1,...,arr4获取数字还可以很清楚地看到4色适用于任何m x n数组,证明了我们算法的有效性(这不是特别严格的证明,但希望您能理解)。

有一些事情要注意。首先,您需要一个长度至少为4的初始数组,否则,就好像您不需要的那样,您将只有不到4种“颜色”可以使用,并且很容易看出您不能仅使用3种颜色来对图形进行着色。另外,可以肯定地说,可以将该算法改进为,比如说现在看起来“随机性更高”,尽管数字分布均匀,但它们看起来并不是非常随机,因为arr1例如只能找到一个数字。在最终数组的某些位置。然而,这种算法确实大致平均分配数(最好的,如果arr1arr2arr3arr4都是一样的大小),做的问题问什么,所以我认为它是有效的。

有关图着色更多的阅读,我会建议阅读维基百科页面(更密集数学),或是很酷的相关问题(四色定理地图,或许你熟悉吗?)。

希望这个答案有帮助,如果您有任何疑问,请发表评论。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章