#include <iostream>
#include <cmath>
using namespace std;
int count=0;//八皇后的可能性
int quenen_line[8];//存储8皇后的位置信息,如果把八皇后的序列号作为行,quenen_line(quenen)则是其列
bool find_place(int start,int i)
{
for(int j=1;j<start;j++)//检查start之前的行对应的列是否重复
{
if(quenen_line[j]==i || abs(quenen_line[j]-i)==abs(start-j))//如果列重复或者主对角线和副对角线已经有了皇后
return 0;
}
return 1;
}
void quenen(int start, int n)
{
if(start>n) count++;//递归终止条件
else
{
for(int i=1;i<=n;i++)
{
if(find_place(start,i))//第start个皇后, 第i列
{
quenen_line[start]=i;//第start个皇后位于第i列构成坐标(start,i)
quenen(start+1,n);
}
}
}
}
int main(){
quenen(1,8);
cout<<count<<endl;
}
八皇后递归实现代码(c++)
最新推荐文章于 2024-07-07 14:15:19 发布