Получить количество всех возможных матриц 3х2, которые удовлетворяют условию - PullRequest
4 голосов
/ 15 мая 2019

Я хочу получить количество всех возможных матриц 3x2, чтобы

  • Каждый элемент матрицы имеет значение 0, 1 или 2.
  • Ни одна из 3 строк матрицы не имеет одинаковых элементов во всех записях (a_ {i1}! = A_ {i2} для i = 1,2,3).
  • Ни один из 2 столбцов матрицы не имеет одинаковых элементов во всех своих записях (a_ {1j} = a_ {2j} = a_ {3j} никогда не имеет место для j = 1,2).

В основном, если 0, 1 и 2 представлены цветами 0 = красный, 1 = зеленый, 2 = синий, вы можете сгенерировать следующие матрицы:

enter image description here

Запрещенные конфигурации матрицы:

enter image description here

Как мне узнать количество всех возможных матриц в этой конфигурации? Или как мне сгенерировать их все?

1 Ответ

0 голосов
/ 15 мая 2019

Вы можете генерировать, используя рекурсию и возврат. Каждый раз вы будете пытаться заполнить одну из ячеек одним из трех цветов, а затем вызывать следующую ячейку. Если, наконец, все цвета заполнены, проверьте, действительна ли матрица.

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)
...