**
八皇后 checkr challenge
**
洛谷原题p1912
https://www.luogu.com.cn/problem/P1219
题目分析
dfs搜索
每行每列对角线上不能有重复的皇后棋子
从第一行开始逐行搜索每次返回 行数+1;
代码
#include<iostream>
using namespace std;
int a[1001],b[1001],c[1001],book[1001];//分别代表行列对角线 book用来记录答案
int n,res=0;
void print()
{
if (res < 3)
{
for (int t = 1; t <= n; t++)
cout <<book[t] << " ";
cout << endl;
}
res++;//虽然只要输出前三个答案,但还要继续统计
}
void dfs(int row)
{
if (row>n)print();//递归结束
for(int col=1;col<=n;col++)
if (!a[col]&&!b[row+col]&&!c[row-col+n])
{
a[col] = 1;
b[row + col] = 1;
c[row - col + n] = 1;
book[row] = col;
dfs(row + 1);//返回行数加一
a[col] = 0;
b[row + col] = 0;
c[row - col + n] = 0;
book[row] = 0;
}
}
int main()
{
cin >> n;
dfs(1);
cout << res;
return 0;
}