描述
n皇后问题:一个n×n的棋盘,在棋盘上摆n个皇后,满足任意两个皇后不能在同一行、同一列或同一斜线上的方案有多少种?
输入
第一行包含一个整数n。
输出
输出一个整数,表示方案数。
# include <cstdio>
int n;
int dfs(int lbm, int mbm, int rbm){
if (mbm != (1<<n)-1){
int ret = 0;
for (int bm = ((1<<n)-1)&~(lbm|mbm|rbm); bm; bm -= bm&(-bm)){
int b = bm&(-bm);
ret += dfs((lbm|b)>>1 , mbm|b, (rbm|b)<<1);
}
return ret;
}
return 1;
}
int main(){
// std::ios::sync_with_stdio(false);cin.tie(0);
scanf("%d", &n);
int ans = dfs(0, 0, 0);
printf("%d\n", ans);
return 0;
}