Вы можете генерировать, используя рекурсию и возврат. Каждый раз вы будете пытаться заполнить одну из ячеек одним из трех цветов, а затем вызывать следующую ячейку. Если, наконец, все цвета заполнены, проверьте, действительна ли матрица.
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)