Python蓝桥杯ALGO-996 车的放置

摆烂了好几天,这个题看到想口吐芬芳

问题描述

在一个n*n的棋盘中,每个格子中至多放置一个车,且要保证任何两个车都不能相互攻击,有多少中放法(车与车之间是没有差别的)
输入格式
  包含一个正整数n
输出格式
  一个整数,表示放置车的方法数
样例输入
2
样例输出
7
数据规模和约定
  n<=8
  【样例解释】一个车都不放为1种,放置一个车有4种,放置2个车有2种。

其实为看题目看了五分钟也没看懂,后来去百度了。。。
棋盘 ===象棋盘。
车不是🚗 而是ju!
因此,只能沿着直线走。

思路分析

这个题目还是dfs
一行一行的遍历,边界条件是,行超出范围

注意:

  • 1.最终遍历结果要+1。表示棋盘一个棋子都没有
  • 2.每一行可以放也可以不放 要分两种情况

代码如下

n=int(input())
res=1
visited=[False for i in range(n)]
def dfs(step):
    global res
    #搜索完毕了
    if step>=n:
        return
    #如果这一行放元素
    #从第一列到最后一列
    for i in range(n):
        if not visited[i]:
            visited[i]=True
            res+=1
            dfs(step+1)
            visited[i]=False
    #如果这一行不放元素        
    dfs(step+1)
dfs(0)
print(res)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值