获取满足条件的所有3x2矩阵的数量

4
我希望获得所有可能的3x2矩阵数量,使得:
  • 矩阵的每个元素都是0、1或2。
  • 矩阵的3行中没有任何一行的所有条目都相同(对于i = 1,2,3,a_{i1} != a_{i2})。
  • 矩阵的2列中没有任何一列的所有条目都相同(对于j = 1,2,a_{1j} = a_{2j} = a_{3j}从不发生)。
基本上,如果用颜色表示0、1和2,则可以生成以下矩阵:

enter image description here

禁止的矩阵配置如下:

enter image description here

如何获得具有此配置的所有可能矩阵的数量?或者如何生成它们?

有趣的事实:555 矩阵是无效的。 - Arnauld
1个回答

0

你可以使用递归和回溯来生成。每次尝试用三种颜色之一填充一个单元格,然后调用下一个单元格。如果最终所有颜色都被填满,则检查矩阵是否有效。

def recursion(Matrix ,i ,j):
    # Validation check
    if i==3:
        if  Matrix[0][0]==Matrix[1][0] and Matrix[1][0]==Matrix[2][0]:
            return;
        if  Matrix[0][1]==Matrix[1][1] and Matrix[1][1]==Matrix[2][1]:
            return;
        if  Matrix[0][0]==Matrix[0][1] or Matrix[1][0]==Matrix[1][1] or Matrix[2][0]==Matrix[2][1]:
            return
        print("Matrix : ")
        for row in Matrix:
            for val in row:
                print '{:4}'.format(val),
            print
        return

    # Shifting to the next row
    if j==2:
        recursion(Matrix,i+1,0)
        return

    # Filling up the current cell by one of {0,1,2}
    for color in range(3):
        Matrix[i][j]=color
        recursion(Matrix,i,j+1)
    return


Matrix=[[0 for x in range(2)] for y in range(3)]
recursion(Matrix,0,0)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接