问题描述:

  在n*n的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在n*n格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线。

盲目的迭代枚举:

 1 /*
 2  *作者:xymaqingxiang
 3  *说明:八皇后——盲目迭代法
 4  *分析:通过8重循环模拟搜索空间中的8^8个状态,从中找出满足约束条件的可行性方案
 5  *日期:2014-05-15
 6  */
 7 #include <iostream>
 8 #include <cstdlib>
 9 using namespace std;
10 bool place(int a[],int n)
11 {
12 for(int i=2;i<=n;i++)
13 {
14     for(int j=1;j<=i-1;j++)
15     {
16         if ((a[i]==a[j])||(abs(a[i]-a[j])==i-j))//不同列和不同斜线约束
17         {
18             return false;//位置冲突
19         }
20     }
21 }
22 return true;//不冲突
23 }
24 
25 void queens()
26 {
27     int a[9];
28     int count = 0;
29     //每个皇后都从第一列位置开始判断
30     for(a[1]=1;a[1]<=8;a[1]++)
31     {
32         for(a[2]=1;a[2]<=8;a[2]++)
33         {
34             for(a[3]=1;a[3]<=8;a[3]++)
35             {
36                 for(a[4]=1;a[4]<=8;a[4]++)
37                 {
38                     for(a[5]=1;a[5]<=8;a[5]++)
39                     {
40                         for(a[6]=1;a[6]<=8;a[6]++)
41                         {
42                             for(a[7]=1;a[7]<=8;a[7]++)
43                             {
44                                 for(a[8]=1;a[8]<=8;a[8]++)
45                                 {
46                                     if(!place(a,8))   //判断位置的合法性
47                                         continue;
48                                     else
49                                     {
50                                         for(int i=1;i<=8;i++)  
51                                         {
52                                             cout<<a[i];        //打印满足约束的可行性放置方案
53                                         }
54                                         cout<<endl;
55                                         count++;
56                                     }
57                                 }
58                             }
59                         }
60                     }
61                 }
62             }
63 
64         }
65     }
66     cout<<count<<endl;
67 }
68 
69 void main()
70 {
71     queens();
72     system("pause");
73 }
盲目枚举——nQueen

相关文章: