N皇后问题

常规N皇后解决问题过程:

(1)针对所给问题,定义问题的解空间;
(2)确定易于搜索的解空间结构;
(3)以深度优先的方式搜索解空间,并且在搜索过程中用剪枝函数避免无效搜索

主要算法实现如下:

 1 void even1(int n,int *p){
 2     int i;
 3     for (i=1;i<=n/2;i++)
 4         p[i-1]=2*i;
 5     for (i=n/2+1;i<=n;i++)
 6         p[i-1]=2*i-n-1;
 7 }
 8 void even2(int n,int *p){
 9     int i;
10     for (i=1;i<=n/2;i++)
11         p[i-1]=(2*i+n/2-3)%n+1;
12     for (i=n/2+1;i<=n;i++)
13         p[i-1]=n-(2*(n-i+1)+n/2-3)%n;
14 }
15 void odd(int n,int *p){
16     generate(n-1,p),p[n-1]=n;
17 }
18 void generate(int n,int *p){
19     if (n&1)
20         odd(n,p);
21     else if (n%6!=2)
22         even1(n,p);
23     else
24         even2(n,p);
25 }

posted on 2012-08-03 11:45  dinghing  阅读(305)  评论(0编辑  收藏  举报

导航