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 }