#include<iostream.h>
#include<math.h>
class Queen
{
friend int nQueen(int);
private:
bool Place(int k);
void Backtrack(void);
int n;
int *x;
long sum;
};
bool Queen::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;
}
void Queen::Backtrack(void)
{
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++;
for(int j=1;j<=n;j++) cout<<x[j]<<" ";
cout<<endl;
}
else{
k++;
x[k]=0;
}
else k--;
}
cout<<"共计"<<sum<<"种。"<<endl;
}
int nQueen(int n)
{
Queen X;
X.n=n;
X.sum=0;
int *p=new int[n+1];
for(int i=0;i<=n;i++)
p[i]=0;
X.x=p;
X.Backtrack();
delete []p;
return X.sum;
}
void main()
{
int n;
cout<<"请输入皇后数:"<<endl;
cin>>n;
cout<<"皇后数为:"<<n<<endl;
cout<<"解决方案有"<<endl;
nQueen(n);
}