【问题标题】:Get the number of all possible 3x2 matrices that fulfill condition获取满足条件的所有可能的 3x2 矩阵的数量
【发布时间】:2019-10-02 07:15:47
【问题描述】:

我想得到所有可能的 3x2 矩阵的数量,这样

  • 矩阵的每个元素都是 0、1 或 2。
  • 矩阵的 3 行中没有一个在所有条目中具有相同的元素(a_{i1} != a_{i2} for i=1,2,3)。
  • 矩阵的 2 列中没有一个在他的所有条目中具有相同的元素(对于 j=1,2,a_{1j} = a_{2j} = a_{3j} 绝不是这种情况)。

如果 0、1 和 2 基本上用颜色 0 = Red、1 = Green、2 = Blue 表示,那么您可以生成以下矩阵:

禁止的矩阵配置:

如何使用此配置获取所有可能矩阵的数量?或者我如何生成它们?

【问题讨论】:

  • 有趣的事实:555 矩阵是无效的。

标签: python matrix combinatorics


【解决方案1】:

您可以使用递归和回溯生成。每次您将尝试用三种颜色之一填充其中一个单元格,然后调用下一个单元格。如果最后所有颜色都填满了,那么检查矩阵是否有效。

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 2011-07-20
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多