皇后问题的一个解法

转载 2006年05月20日 21:56:00

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

long sum=0,upperlim=1;

void test(long row, long ld, long rd){

if (row != upperlim){
long pos = upperlim & ~(row | ld | rd);
while (pos){
long p = pos& -pos;
pos -= p;
test(row+p, (ld+p)<<1, (rd+p)>>1);
}}
else
sum++;
}

int main(int argc, char *argv[])
{
time_t tm;
int n=8;

if(argc!=1)n=atoi(argv[1]);
tm=time(0);
if((n<1)||(n>32)){
printf(" 只能计算1-32之间/n");
exit(-1);}
printf("%d 皇后/n",n);
upperlim=(upperlim<<n)-1;

test(0,0,0);
printf("共有%ld种排列, 计算时间%d秒 /n", sum,(int)(time(0)-tm));
}


10 皇后
共有724种排列, 计算时间0秒

11 皇后
共有2680种排列, 计算时间0秒

12 皇后
共有14200种排列, 计算时间0秒

13 皇后
共有73712种排列, 计算时间0秒

14 皇后
共有365596种排列, 计算时间1秒

15 皇后
共有2279184种排列, 计算时间5秒


16 皇后
共有14772512种排列, 计算时间30秒

17 皇后
共有95815104种排列, 计算时间224秒

相关文章推荐

八皇后问题C解法

  • 2008-07-22 17:33
  • 993B
  • 下载

n皇后问题解法

八皇后的一个回溯递归解法

解法来自严蔚敏的数据结构与算法。 代码如下: #include using namespace std; const int N = 8;//皇后数 int count = 0;//解法统计 int...

八皇后问题的C++解法

飘逸的python - 八皇后问题简洁解法

思路: 使用DFS.用一维数组表达坐标,其中下标为行,元素为列.A[i]=j表示将第i行的皇后放在j列上.一行一行依次遍历(从上往下),决定放在哪列(从左往右),这样就不用判断行冲突,只需要...

八皇后问题C解法

"八皇后"问题的解法(1)

最近准备整理5种常见的"八皇后"问题的解法,这是第一篇,用递归方法求解。 简单介绍下"八皇后"问题:如何在8*8棋盘上无冲突放置8个皇后,无冲突可按如下理解(1)任何水平或竖直方向不能再有其他皇后;(...

八皇后问题:递归和非递归解法

#include #include using namespace std; #define MAXNUM 10 int tot=0,row,line[MAXNUM],n=8; void s...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)