输入输出样例
示例 1
输入
4
输出
2
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
很经典的8皇后问题:
我们对用a[n]来存储放皇后的位置,第i个皇后放在(i,a[i])坐标上,然后对每一行,按列的顺序依次放,放了一个就到下一行,每次要看坐标是否满足放的条件,代码如下所示:
#include <iostream>
using namespace std;
int ans,n;
int a[11];
bool valid(int row,int col)
{
for(int i=1;i<row;++i)
{
if(a[i]==col) return false;
if(row-i==col-a[i]&&row-i<3) return false;
if(row-i==a[i]-col&&row-i<3) return false;
}
return true;
}
void dfs(int row)
{
if(row>n)//放完皇后
{
ans++;
return;
}
for(int i=1;i<=n;++i)
{
if(valid(row,i))//满足不在同一列 45°线上
{
a[row]=i;
dfs(row+1);
}
}
}
int main()
{
// 请在此输入您的代码
cin>>n;
dfs(1);
cout<<ans;
return 0;
}