摆烂了好几天,这个题看到想口吐芬芳
问题描述
在一个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)