#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皇后问题
最新推荐文章于 2022-04-29 22:11:36 发布
本文介绍了一种使用C++实现的N皇后问题解决方案,通过递归算法来寻找所有可能的皇后放置方式,确保任意两个皇后之间既不在同一行、同一列也不在对角线上。

948

被折叠的 条评论
为什么被折叠?



