//偶保存的一位以前上优快云的高人写的, 稍慢 ...
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
long count=0,ulim;
void slove( long row , long ld , long rd )
{
long pos,p;
if( row == ulim )
++count;
else for( pos = ulim&~(row|ld|rd);pos;p=pos&-pos,pos-=p,slove(row+p,(ld+p)<<1,(rd+p)>>1) )
;
}
int main(int argc, char *argv[])
{
int n = 8;
time_t bg ;
if( argc == 2&&(((n=atoi(argv[1]))<1||n>32)))
exit(1);
bg = time(NULL);
ulim = (1<<n)-1;
slove(0,0,0);
printf("N=%d,count=%d,time used=%d/n",n,count,(int)(time(NULL)-bg));
return 0;
}
本文提供了一个使用位操作实现的N皇后问题解决方案。通过递归地放置皇后并利用位运算来检查冲突,该程序能够计算出特定大小棋盘上所有可能的布局方案,并记录所用时间。
1142





