蓝桥杯 矩阵计数(python实现)

题目描述
一个 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)
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值