#include <cstdio>
#include <cstdlib>
#include <ctime>
long sum =
0, lim;
void test(
long row,
long ld,
long rd){
if (row != lim){
long pos = lim & ~(row | ld | rd);
while (pos){
long p = pos & -pos;
pos -= p;
test(row | p, (ld | p) <<
1, (rd | p) >>
1);
}
}
else sum++;
}
int main(){
time_t tm;
int n;
printf(
" 需要计算的皇后数量\n");
scanf(
"%d", &n);
tm = time(
0);
if ((n <
1) || (n >
32)){
printf(
" 只能计算1-32之间\n");
exit(-
1);
}
printf(
"%d 皇后\n", n);
lim = (
1 << n) -
1;
test(
0,
0,
0);
printf(
"共有%ld种排列, 计算时间%d秒 \n", sum, (
int) (time(
0) - tm));
}