题目描述
在一个nXn的国际象棋棋盘上放置n(n<=12)个皇后,使它们不能互相攻击(即任意两个皇后不能在同一行、同一列或同一对角线上)。试求出所有方法。
输入
输入一个数n .(n<=12)
输出
输出所有的排列方案总数。
样例输入
4
#include<iostream>
#include<cmath>
using namespace std;
int n,ans,a[14];
void dg(int x)
{
if(x>n)
{
ans++;
/*for(int i=1;i<=n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
return ;*/
}
else
{
for(int j=1;j<=n;j++)
{
bool f=true;
for(int i=1;i<x;i++)
{
if(x-i==abs(j-a[i])||a[i]==j)
{
f=false;
break;
}
}
if(f!=false)
{
a[x]=j;
dg(x+1);
}
}
}
}
int main()
{
cin>>n;
dg(1);
cout<<ans;
return 0;
}