#include <iostream>
using namespace std;
const int N= 13;
bool st[N][N];
bool COL[N]; //列
bool diag[N*2];//对角,左下到右上
bool undiag[N*2]; //反对角,左上到右下
int n;
int cnt=3; //输出前三个方案
int res=0; //总方案数
void dfs(int u) //表示遍历到了第u行(从第0行开始)
{
if(u == n) //放完了
{
res++;
if(--cnt)
{
for(int i=0 ; i<n ; i++)
for(int j=0 ; j<n ; j++)
if(st[i][j])
cout<<j+1<<" ";
cout<<endl;
}
return;
}
for(int i=0 ; i<n ; i++)
{
if(!COL[i] && !diag[u+i] && !undiag[i-u+n-1]) //该位置可以放皇后
{
COL[i] = diag[u+i] = undiag[i-u+n-1] = true; //皇后放下
st[u][i] = true;
dfs(u+1);
COL[i] = diag[u+i] = undiag[i-u+n-1] = false; //恢复
st[u][i] = false;
}
}
}
int main()
{
cin>>n;
dfs(0);
cout<<res<<endl;
return 0;
}
我输出的三行和样例的顺序不一样,不会因为这个吧?