#include <iostream>
#include <bits/stdc++.h>
using namespace std;
//3.1 深度优先搜索
//P1219 [USACO1.5]八皇后 Checker Challenge
int total=0;
int n;
int a[100],b[100],c[100],d[100];
//a数组表示的是行;
//b数组表示的是列;
//c表示的是左下到右上的对角线;
//d表示的是左上到右下的对角线
void print()
{
if(total<=2)
{
for(int i=1;i<=n;i++)
{
cout << a[i] << " ";
}
cout << endl;
}
total++;
}
void queen(int x)//第x行,每运行一次就表示这一行已经被占领
{
if(x>n)
{
print();
return;
}
else
{
for(int i=1;i<=n;i++)
{
//if((!b[i])&&(!c[x+i])&&(!d[x-i+n]))//如果没有皇后占领,执行以下程序
if(b[i]==0&&c[x+i]==0&&d[x-i+n]==0)
{
a[x]=i;//第x行 第i列占领
b[i]=1;
c[x+i]=1;
d[x-i+n]=1;
//继续搜索
queen(x+1);
//回溯 撤销已操作步骤
b[i]=0;
c[x+i]=0;
d[x-i+n]=0;
}
}
}
}
int main()
{
//初始化数组
memset(a,0,100);
memset(b,0,100);
memset(c,0,100);
memset(d,0,100);
cin>>n;
queen(1);//从第一个皇后开始找
cout << total << endl;
return 0;
}
04-21
305