#include<iostream>
using namespace std;
int n,sum=0,vertical[20],diagonal[20];
bool diagonalJudge(int x,int y)
{
for(int k=1;k<x;k++)
if(x-k==y-diagonal[k]||x+y==k+diagonal[k])
return false;
return true;
}
void nQueen(int i)
{
if(i==n+1)
{
sum++;
return;
}
for(int j=1;j<=n;j++)
{
if(vertical[j]==0&&diagonalJudge(i,j))
{
vertical[j]=1;
diagonal[i]=j;
nQueen(i+1);
vertical[j]=0;
diagonal[i]=0;
}
}
}
int main()
{
cin>>n;
nQueen(1);
cout<<sum<<endl;
return 0;
}
N皇后问题
最新推荐文章于 2024-04-18 08:15:00 发布