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 }