#include<iostream>
#include<cmath> //求绝对值函数需要引入该头文件
using namespace std;
const int maxn=105;
int n;//n表示n个皇后
int x[maxn]; //x[i]表示第i个皇后放置在第i行第x[i]列
int sum; //记录解的个数
bool place(int k){
for(int j=1;j<k;j++)
{
if((abs(k-j)==abs(x[j]-x[k]))||(x[j]==x[k])) return false;
return true;
}
//判断第t个皇后能否放置
}
void backtrack(int t)
{
if(t>n) sum++;
else{
for(int i=1;i<=n;i++)
{
x[t]=i;
if(place(t)) backtrack(t+1);
}
}
}//递归回溯
void backtrack()
{
x[1]=0;
int k=1;
while(k>0)
{
x[k]+=1;
while((x[k]<=n)&&!(place(k)))
{
x[k]+=1;
}
if(x[k]<=n)
{
if(k==n) sum++;
else{
k++;
x[k]=0;
}
}
else{
k--;
}
}
}
//迭代回溯
int main(){
n=4;
sum=0;
// backtrack(1);
backtrack();
cout<<sum<<endl;
return 0;
}
n皇后问题
于 2023-05-22 12:33:40 首次发布