//N皇后问题 运用递归代替多重循环
#include<iostream>
#include<cmath>
using namespace std;
int N;
int QueenPos[100];
void QueenFind(int cur)//假设第0行到第cur-1行的皇后已经摆放好,从cur行开始摆放每个皇后的位置
{
if(cur==N)
{
for(int i=0;i<N;i++)
{
printf("%d ",QueenPos[i]+1);
}
printf("\n");
}
for(int row=0;row<N;row++)//从当前cur行的0列开始看
{
int preLine;
for(preLine=0;preLine<cur;preLine++)
{
if(QueenPos[preLine]==row||abs(cur-preLine)==abs(QueenPos[preLine]-row))//如果有皇后位于同一列或者在对角线上,break
{
break;
}
}
if(preLine==cur)//如果满足
{
QueenPos[cur]=row;//记录当前皇后的位置
QueenFind(cur+1);//并递归调用下一行
}
}
}
int main()
{
cin>>N;
QueenFind(0);//从第0行开始找
return 0;
}