题目描述
一个 N \times MN×M 的方格矩阵,每一个方格中包含一个字符 O 或者字符 X。
要求矩阵中不存在连续一行 3 个 X 或者连续一列 3 个 X。
问这样的矩阵一共有多少种?
输入描述
输入一行包含两个整数 N, M\ (1 \leq N,M \leq 5)N,M (1≤N,M≤5)。
输出描述
输出一个整数代表答案。
输入输出样例
示例
输入
2 3
copy
输出
49
依次从(0,0) 到(N,M)进行遍历,这里需要注意只不能是3个X,首先我将3个’O’也考虑进去了,还有这里要考虑是否连续,这段代码里面没有,比较简单,在这耗了太多时间也就不写了
N,M = map(int,input().split())
map = [[0 for i in range(M)] for row in range(N)]
sumvalue=0
def isok(x,y):
if((map[x].count('X')==3)): #如果行有三个X
return False #
temp = [row[y] for row in map] #
if ((temp.count('X')==3)): #如果列有三个X
return False#
return True
def sousuo(x,y): #
global sumvalue
if(x==N and y==0): #如果遍历到了(N,0)说明这种选择可以,计数+1
sumvalue+=1
return
for i in ['X','O']: #首先选X再选O
map[x][y]=i
if(not isok(x,y)):
continue
if(y==M-1):
sousuo(x+1,0)
else:
sousuo(x,y+1)
map[x][y]=0
sousuo(0,0)
print(sumvalue)