#include<iostream>
using namespace std;
//当前检测的行列 是否 符合条件
//从1行1列开始
bool check(int row,int col,int *list)
{
for(int i=1;i<row;i++)
{
if(col==list[i])
{
return false;
}
else if(abs(row-i)==abs(list[i]-col))
{
return false;
}
}
list[row]=col;
return true;
}
void queen(int n)
{
//回溯方法
int *array=new int[n+1];
memset(array,0,n+1);
int k=1;//当前行
while(k>=1)
{
array[k]=array[k]+1;//检测该行下一列的点
while(!check(k,array[k],array)&&array[k]<=n)
{
array[k]=array[k]+1; //若不符合就将该行的检测值一直右移
}
//若改点符合
if(array[k]<=n&&k==n)
{
for(int i=1;i<=n;i++)
{
cout<<array[i]<<" ";
}
cout<<endl;
}
else if(array[k]<=n&&k<n)
{
k=k+1;
}
else
{
array[k]=0;
k=k-1;
}
}
}
int main()
{
queen(20);
getchar();
return 0;
}