求解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