求解N皇后问题

递归

 1 //求解N皇后问题
 2 //递归法
 3 #include<stdio.h>
 4 #include<stdlib.h>
 5 const int N = 20;
 6 int q[N];
 7 void disp(int n){
 8     static int count = 0;
 9     int i;
10     printf("第%d个解:",++count);
11     for(i=1;i<=n;i++)
12         printf("(%d %d)",i,q[i]);
13     printf("\n");
14 }
15 int place(int k,int j){        //测试(k,j)位置能否放置皇后 
16     int i = 1;
17     while(i<k){
18         if((q[i] == j) || (abs(q[i] - j) == abs(k-i)))    //同列或同对角线 
19             return 0;
20         i++; 
21     }
22     return 1;
23 }
24 void queen(int k,int n){    //放置1~k的皇后  递归实现 
25     int j;
26     if(k>n)
27         disp(n);
28     else{
29         for(j=1;j<=n;j++){
30             if(place(k,j)){        //在第k行找到一个合适位置(k,j) 
31                 q[k] = j;
32                 queen(k+1,n);
33             }
34         }
35     }
36 }
37 int main(){
38     int n;
39     printf("请输入n的值\n n = ");
40     scanf("%d",&n);
41     queen(1,n);
42     return 0;
43 } 
44  
View Code
posted @ 2020-01-04 22:05  Hqx_curiosity  阅读(150)  评论(0编辑  收藏  举报