#include <iostream>
#include <cmath>
using namespace std;
int queen[100];
int n;
void printQ(){
for(int i=1; i<=n; i++){
cout<<queen[i]<<' ';
}
cout<<endl;
}
//假设前面 1~k-1个皇后已经摆好
void NQueen(int k){
if(k == n+1){
printQ();
return ;
}
//第k个皇后的n种摆法
for(int i=1; i<=n; i++){
//判断与前k-1个皇后的位置是否矛盾
int j;
for(j=1; j<=k-1; j++){
if( queen[j] == i || abs(queen[j]-i) == abs(j-k) ){
break;
}
}
//上述循环非break 说明该位置可以放皇后
if(j > k-1){
queen[k] = i;
NQueen(k+1);
}
}
}
int main(){
cin>>n;
NQueen(1);
return 0;
}
样例输入
4
样例输出
2 4 1 3
3 1 4 2