车的放置(dfs-类n皇后问题)
问题描述
在一个n*n的棋盘中,每个格子中至多放置一个车,且要保证任何两个车都不能相互攻击,有多少中放法(车与车之间是没有差别的)
输入格式
包含一个正整数n
输出格式
一个整数,表示放置车的方法数
样例输入
2
样例输出
7
数据规模和约定
n<=8
【样例解释】一个车都不放为1种,放置一个车有4种,放置2个车有2种。
车如果在同一行或者同一列就会相互攻击
n=int(input())
v=[0]*10
ans=1#什么都不放也算一种
def dfs(row):
global ans
if row>n:
return
for i in range(1,n+1):
if v[i]==0:
v[i]=1
ans+=1
dfs(row+1)
v[i]=0
dfs(row+1)
dfs(1)
print(ans)