本题链接
P1219 [USACO1.5]八皇后 Checker Challenge
本题同样和本蒟蒻写过的另外一题八皇后差不多
DFS:1213:八皇后问题(信息学)
话不多说上代码
//运行通过且结果正确
#include<bits/stdc++.h>
using namespace std;
int a[100];
int b[100];
int c[100];
int d[100];
//a数组表示的是行;
//b数组表示的是列;
//c表示的是左下到右上的对角线;
//d表示的是左上到右下的对角线;
int n ,total;
void print()
{
if(total<3)
{
for (int i = 1; i <= n; i++)
{
cout << a[i] << " ";
}
cout << endl;
}
total++;
}
void dfs(int i)
{
if (i == n+1)
{
print();
return;
}
for (int j = 1; j <= n; j++)
{
if ((!b[j]) && (!c[i + j]) && (!d[i - j + 7]))
{
a[i] = j;//标记第i行第ji列
b[j] = 1;//占领纵列
c[i + j] = 1;//占领左对角线
d[i - j + 7] = 1;//占领右对角线
dfs(i + 1);
b[j] = 0;
c[i + j] = 0;
d[i - j + 7] = 0;
}
}
}
int main()
{
cin >> n;
dfs(1);
cout << total << endl;
return 0;
}