时间限制:1 s 空间限制:256 MB
在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于再n×n的棋盘上放置n个皇后,任何2个皇后不妨在同一行或同一列或同一斜线上。
输入
给定棋盘的大小n (n ≤ 13)
输出
输出整数表示有多少种放置方法。
样例
样例输入1
8
样例输出1
92
这道n皇后问题非常有名,但题目中很明显地给了我们提示:dfs
void dfs(int a){
if(a>n){
ans++;
return;
}
else{
for(int i=1;i<=n;i++){
x[a]=i;
if(pd(a)){ //pd用于判断a能否存在,具体见后
dfs(a+1);
}
else{
continue;
}
}
}
}
pd代码: