使用什么样的算法生成方阵?

时间:2014-07-24 09:10:31

标签: algorithm math matrix

我需要生成一个矩阵并填充数字和非活动单元格,但每个列或行的总和是相等的。我知道魔盒和数独,但不同。你能帮我吗?我需要使用什么样的算法来生成这个矩阵?

E.g

X = 0 =阻止无效

  Matrix ( 4x4 )

   0  8  4  X  | 12
   2  0  8  2  | 12
  10  1  X  1  | 12
   0  3  X  9  | 12
   ____________| 
  12 12 12 12

其他例子:

  Matrix ( 5x5 )      

  0  2  2  3  5 | 12
  2  4  0  5  1 | 12
  8  2  0  2  0 | 12
  0  4  2  0  6 | 12
  2  0  8  2  0 | 12
  ______________|
  12 12 12 12 12

结果可以是任何其他数字,它并不总是12.就像在示例中我更容易为我做。它不是对称的。 注意:这不是魔术盒,也不是数独。

结论:

1)我需要构建此框并填充数字并阻止非活动状态。

2)矩阵总是正方形(3x3,4x4,5x5,NxN,......)

3)当我填空的空间没有阻塞时,我可以使用一号,两位或三位数。

4)各方面的总和必须相等。

5)在上面的例子中,X是块。阻止意味着不能用于玩家。

6)你可以将非活动块设为0,但不影响总和。

7)对于没有

的块数或非活动数也没有限制

8)要使用数字填充单元格,可以根据需要重复此操作。没有限制。

9)矩阵总是正方形,可能有不同的尺寸。 (2)

谢谢你们的帮助。对不起,问题是不完整的,因为我的英语太糟糕了,但这就是全部。

2 个答案:

答案 0 :(得分:3)

在算法方面,我会把它作为一个线性方程组来处理。您可以将该框作为变量矩阵:

x11 x12 x13 x14
x21 x22 x23 x24
x31 x32 x33 x34
x41 x42 x43 x44

然后你将方程式设为:

row1 = row2  (x11 + x12 + x13 + x14 = x21 + x22 + x23 + x24)
row1 = row3  (...)
row1 = row4
row1 = col1
row1 = col2
row1 = col3
row1 = col4

对于N = 4,你将有16个变量和7个方程式,所以你会得到一个数量为degrees of freedom的解决方案(至少9个,正如@JamesMcLeod指出的那样,并且完全< / em> 9,如@Chris所述,所以你可以生成满足限制的每个可能的矩阵,只给每个自由参数赋值。在结果矩阵中,您可以将0的每个单元格标记为非活动单元格。

要做到这一点,你需要一个能够解决具有自由度的线性方程组的库或软件包(几个数学软件包可以做到这一点,但现在只有Maple出现在我的脑海里)。 p> PD:我刚读过这些数字必须有一个,两个或三个数字(并且也是正数?)。要解决这个问题,你可以“小心点”。在解决方程组时,选择自由参数的值时,或者可以为问题添加不等式,如:

x11 < 1000
x11 >= 0  (if values must be positive)
x12 < 1000
(...)

但那将是一个线性编程问题。你也可以像这样接近它。

PD2:您也可以使用对角矩阵制作简单的案例:

7 X X X
X 7 X X
X X 7 X
X X X 7

但我想你已经知道了......

编辑:感谢James McLeod和Chris的更正。

答案 1 :(得分:0)

你用随机数填充矩阵吗?你需要一个函数,它有一个参数作为1维向量,它将验证行的元素之和是否为12,那么你仍然可以将这个函数用于你的主要列(带一个循环)。