python - 获取满足条件的所有可能的 3x2 矩阵的数量
问题描述
我想获得所有可能的 3x2 矩阵的数量,使得
- 矩阵的每个元素都是 0、1 或 2。
- 矩阵的 3 行在所有条目中都没有相同的元素(a_{i1} != a_{i2} for i=1,2,3)。
- 矩阵的 2 列中没有一个在他的所有条目中具有相同的元素(a_{1j} = a_{2j} = a_{3j} 从来不是 j=1,2 的情况)。
基本上,如果 0、1 和 2 由颜色 0 = Red、1 = Green、2 = Blue 表示,那么您可以生成以下矩阵:
禁止的矩阵配置:
如何使用此配置获取所有可能矩阵的数量?或者我如何生成它们?
解决方案
您可以使用递归和回溯生成。每次您将尝试用三种颜色之一填充其中一个单元格,然后调用下一个单元格。如果最终所有颜色都被填满,则检查矩阵是否有效。
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)
推荐阅读
- github - 表格无法正确呈现 - Markdown Github
- java - 在 LinkedList 中定义一个 Deque
- sql - SQL Server“varchar 值 '99101500728' 的转换溢出了一个 int 列。”
- javascript - 如何从 localforage 获取数据?
- django - 如何在 Django 中处理从 get() 到 filter() 的异常
- css - AMP整页封面背景视频
- groovy - 在构建地图时四舍五入浮点数
- javascript - 对表格进行排序 - React.js
- r - 如何根据具有特定顺序的向量重新排序具有许多列和行的数据框?
- assembly - 8086汇编中给寄存器分配段名是什么意思?