版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Hacker_Wind/article/details/81704119
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <queue>
#include <stack>
#include <set>
using namespace std;
int n;
bool ht[105]={false};//用哈希表记录该数是否已经使用过
int p[105];//记录每一个全排列
int ans=0;
void nqueen(int a)
{
if(a==n+1)
{
ans++;
return;
}
for(int i=1;i<=n;i++)
{
if(ht[i]==false)
{
int flag=1;
for(int pre=1;pre<a;pre++)
{
if(abs(p[i]-i)==abs(a-pre))
{
flag=0;
break;
}
}
if(flag)
{
p[a]=i;
ht[i]=true;
nqueen(a+1);
ht[i]=false;
}
}
}
}
int main()
{
cin>>n;
nqueen(1);
cout<<ans<<endl;
return 0;
}