N皇后问题

N皇后问题是当前行的皇后不能受到前面皇后的攻击,即当前行的皇后不能和之前的皇后在同一行,或在同一对角线。

 1 #include<stdio.h>
 2 #include<math.h>
 3 #include<stdlib.h>
 4 #define MAXN 100
 5 
 6 int position[MAXN]; //position[i]=j代表第i行皇后应该在j列;
 7 int N;
 8 void NQueen(int k)
 9 {
10     if (k==N+1)
11     {
12         int flag=0;
13         for (int i=1;i<=N;i++)
14         {
15         if (flag==0){printf("%d",position[i]);flag=1;}
16         else printf(" %d",position[i]);
17         }
18         printf("
");
19         return ;
20     }
21 
22     for (int i=1;i<=N;i++)
23     {
24         int j;
25         for ( j=1;j<k;j++)
26         {
27             if (position[j]==i || abs(position[j]-i)==abs(k-j))break;
28         }
29         if (j==k)
30         {position[k]=i;
31         NQueen(k+1);
32         }
33     }
34     return ;
35 
36 }
37 
38 int main()
39 {
40     scanf("%d",&N);
41     NQueen(1);
42     return 0;
43 }
原文地址:https://www.cnblogs.com/wuxiaotianC/p/6645799.html