N皇后问题

采用递归回溯法

#include <iostream> using namespace std; #define N 1001 int rcd[N]; int n; void search(int l) { static int count = 0; if(l == n) { count++; cout << "solution " << count << " : "; for(int i = 0; i < n; i++) { cout << rcd[i] << " "; } cout << endl; } else { for(int i = 0; i < n; i++) { int ok = 1; rcd[l] = i; for(int j = 0; j < l; j++) { if (rcd[j] == i || l - rcd[l] == j - rcd[j] || l + rcd[l] == j + rcd[j]) { ok = 0; break; } } if(ok) { search(l+1); } } } } int readData() { int i; if( scanf("%d", &n) == EOF) { return 0; } return 1; } int main() { while(readData()) { search(0); } }

运行结果:

输入8

solution 1 : 0 4 7 5 2 6 1 3 solution 2 : 0 5 7 2 6 3 1 4 solution 3 : 0 6 3 5 7 1 4 2 solution 4 : 0 6 4 7 1 3 5 2 solution 5 : 1 3 5 7 2 0 6 4 solution 6 : 1 4 6 0 2 7 5 3 solution 7 : 1 4 6 3 0 7 5 2 solution 8 : 1 5 0 6 3 7 2 4 solution 9 : 1 5 7 2 0 3 6 4 solution 10 : 1 6 2 5 7 4 0 3 solution 11 : 1 6 4 7 0 3 5 2 solution 12 : 1 7 5 0 2 4 6 3 solution 13 : 2 0 6 4 7 1 3 5 solution 14 : 2 4 1 7 0 6 3 5 solution 15 : 2 4 1 7 5 3 6 0 solution 16 : 2 4 6 0 3 1 7 5 solution 17 : 2 4 7 3 0 6 1 5 solution 18 : 2 5 1 4 7 0 6 3 solution 19 : 2 5 1 6 0 3 7 4 solution 20 : 2 5 1 6 4 0 7 3 solution 21 : 2 5 3 0 7 4 6 1 solution 22 : 2 5 3 1 7 4 6 0 solution 23 : 2 5 7 0 3 6 4 1 solution 24 : 2 5 7 0 4 6 1 3 solution 25 : 2 5 7 1 3 0 6 4 solution 26 : 2 6 1 7 4 0 3 5 solution 27 : 2 6 1 7 5 3 0 4 solution 28 : 2 7 3 6 0 5 1 4 solution 29 : 3 0 4 7 1 6 2 5 solution 30 : 3 0 4 7 5 2 6 1 solution 31 : 3 1 4 7 5 0 2 6 solution 32 : 3 1 6 2 5 7 0 4 solution 33 : 3 1 6 2 5 7 4 0 solution 34 : 3 1 6 4 0 7 5 2 solution 35 : 3 1 7 4 6 0 2 5 solution 36 : 3 1 7 5 0 2 4 6 solution 37 : 3 5 0 4 1 7 2 6 solution 38 : 3 5 7 1 6 0 2 4 solution 39 : 3 5 7 2 0 6 4 1 solution 40 : 3 6 0 7 4 1 5 2 solution 41 : 3 6 2 7 1 4 0 5 solution 42 : 3 6 4 1 5 0 2 7 solution 43 : 3 6 4 2 0 5 7 1 solution 44 : 3 7 0 2 5 1 6 4 solution 45 : 3 7 0 4 6 1 5 2 solution 46 : 3 7 4 2 0 6 1 5 solution 47 : 4 0 3 5 7 1 6 2 solution 48 : 4 0 7 3 1 6 2 5 solution 49 : 4 0 7 5 2 6 1 3 solution 50 : 4 1 3 5 7 2 0 6 solution 51 : 4 1 3 6 2 7 5 0 solution 52 : 4 1 5 0 6 3 7 2 solution 53 : 4 1 7 0 3 6 2 5 solution 54 : 4 2 0 5 7 1 3 6 solution 55 : 4 2 0 6 1 7 5 3 solution 56 : 4 2 7 3 6 0 5 1 solution 57 : 4 6 0 2 7 5 3 1 solution 58 : 4 6 0 3 1 7 5 2 solution 59 : 4 6 1 3 7 0 2 5 solution 60 : 4 6 1 5 2 0 3 7 solution 61 : 4 6 1 5 2 0 7 3 solution 62 : 4 6 3 0 2 7 5 1 solution 63 : 4 7 3 0 2 5 1 6 solution 64 : 4 7 3 0 6 1 5 2 solution 65 : 5 0 4 1 7 2 6 3 solution 66 : 5 1 6 0 2 4 7 3 solution 67 : 5 1 6 0 3 7 4 2 solution 68 : 5 2 0 6 4 7 1 3 solution 69 : 5 2 0 7 3 1 6 4 solution 70 : 5 2 0 7 4 1 3 6 solution 71 : 5 2 4 6 0 3 1 7 solution 72 : 5 2 4 7 0 3 1 6 solution 73 : 5 2 6 1 3 7 0 4 solution 74 : 5 2 6 1 7 4 0 3 solution 75 : 5 2 6 3 0 7 1 4 solution 76 : 5 3 0 4 7 1 6 2 solution 77 : 5 3 1 7 4 6 0 2 solution 78 : 5 3 6 0 2 4 1 7 solution 79 : 5 3 6 0 7 1 4 2 solution 80 : 5 7 1 3 0 6 4 2 solution 81 : 6 0 2 7 5 3 1 4 solution 82 : 6 1 3 0 7 4 2 5 solution 83 : 6 1 5 2 0 3 7 4 solution 84 : 6 2 0 5 7 4 1 3 solution 85 : 6 2 7 1 4 0 5 3 solution 86 : 6 3 1 4 7 0 2 5 solution 87 : 6 3 1 7 5 0 2 4 solution 88 : 6 4 2 0 5 7 1 3 solution 89 : 7 1 3 0 6 4 2 5 solution 90 : 7 1 4 2 0 6 3 5 solution 91 : 7 2 0 5 1 4 6 3 solution 92 : 7 3 0 2 5 1 6 4

对于N皇后解的个数,参考:http://zhidao.baidu.com/question/53817565.html?fr=qrl

【1皇后】共1组解 【2皇后】共0组解 【3皇后】共0组解 【4皇后】共2组解 【5皇后】共10组解 【6皇后】共4组解 【7皇后】共40组解 【8皇后】共92组解 【9皇后】共352组解 【10皇后】共724组解 【11皇后】共2680组解 【12皇后】共14200组解 【13皇后】共73712组解 【14皇后】共365596组解 【15皇后】共2279184组解 【16皇后】共14772512组解

当N>16时,构造法给出解,参考POJ 3239

一、当n mod 6 != 2 且 n mod 6 != 3时,有一个解为:

2,4,6,8,...,n,1,3,5,7,...,n-1       (n为偶数)

2,4,6,8,...,n-1,1,3,5,7,...,n       (n为奇数)

(上面序列第i个数为ai,表示在第i行ai列放一个皇后;... 省略的序列中,相邻两数以2递增。下同)

二、当n mod 6 == 2 或 n mod 6 == 3时,

(当n为偶数,k=n/2;当n为奇数,k=(n-1)/2)

k,k+2,k+4,...,n,2,4,...,k-2,k+3,k+5,...,n-1,1,3,5,...,k+1         (k为偶数,n为偶数)

k,k+2,k+4,...,n-1,2,4,...,k-2,k+3,k+5,...,n-2,1,3,5,...,k+1,n       (k为偶数,n为奇数)

k,k+2,k+4,...,n-1,1,3,5,...,k-2,k+3,...,n,2,4,...,k+1               (k为奇数,n为偶数)

k,k+2,k+4,...,n-2,1,3,5,...,k-2,k+3,...,n-1,2,4,...,k+1,n           (k为奇数,n为奇数)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值