题解:
#include<bits/stdc++.h>
using namespace std;
int check[3][28]={0},n,sum=0,a[15]; //a用来记录答案
void dfs(int x)
{
if(x>n)
{
sum++;
if(sum>3) return ;
else
{
for(int i=1;i<=n;i++) {cout<<a[i]<<" ";}
cout<<endl;
return ;
}
}
for(int i=1;i<=n;i++) //i为列
{
if((check[0][i]==0)&&(check[1][x+i]==0)&&(check[2][x-i+n]==0))//check[0][i]记录i列
{
a[x]=i; //主对角线上x+y为定值
check[0][i]=1; check[1][x+i]=1;check[2][x-i+n]=1;//check[1][x+i]记录主对角线上
dfs(x+1); //副对角线上x-y为定值,x-y+n防止出现负号
check[0][i]=0; check[1][x+i]=0;check[2][x-i+n]=0;//check[1][x+i]记录副对角线上
}
}
}
int main()
{
cin>>n;
dfs(1);
cout<<sum;
return 0;
}