皇后问题的一个解法

转载 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皇后问题解法

  • 2015年10月27日 21:35
  • 4KB
  • 下载

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

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

八皇后问题的C++解法

  • 2008年07月26日 10:50
  • 1KB
  • 下载

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

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

八皇后问题C解法

  • 2008年07月22日 17:31
  • 1KB
  • 下载

八皇后问题(最简单的递归解法)

题目 原文: Write an algorithm to print all ways of arranging eight queens on a chess board so that...

算法总结——八皇后问题(三种解法)

目录(?)[+]问题描述 解题思路一 参考程序一解题思路二参考程序二解题思路三参考程序三实现中常见的问题问题描述 会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:皇后问题的一个解法
举报原因:
原因补充:

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