#include <iostream>
#include <stdlib.h>
using namespace std;
#define N 4 //皇后个数
int sum=0;
int *x=new int[N+1];
bool place(int k)//
{
int i;
for(i=1; i<k; i++)
{
if(x[i]==x[k] || abs(i-k)==abs(x[i]-x[k])) //判断是否在同一列以及是否同一对角线
return false;
}
return true;
}
void backtrack(int t) //
{
int i=0;
if(t>N)
{
for(i=1; i<=N; i++)
cout<<x[i]<<" ";
cout<<endl;
sum++;
}
else
{
for(i=1; i<=N; i++)
{
x[t]=i; //重新换一个列值,体现了回溯。
if(place(t))
backtrack(t+1);
}
}
}
int main()
{
backtrack(1);
cout<<"共 "<<sum<<" 种"<<endl;
}
N皇后问题 算法 回溯法
最新推荐文章于 2023-10-13 09:57:34 发布