class Queen{
friend int nQueen(int);
private:
bool Place(int k);
void Backtrack(int t);
int n,
*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(int t){//回溯算法
if(t>n){
sum++;
for(int i=1;i<=n;i++)
cout<<"("<<i<<","<<x[i]<<") ";
cout<<endl;
for(i=1;i<=n;i++){//显示出排放的样子
for(int j=1;j<=n;j++){
if(x[i]==j){
cout<<"Q";
continue;
}
cout<<"+";
}
cout<<endl;
原文请找腾讯752018766辣,文-论'文.网http://www.751com.cn
}
else
for(int i=1;i<=n;i++){
x[t]=i;
if(Place(t))
Backtrack(t+1);
}
}
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(1);
delete []p;
return X.sum;
}
int main(){
int n;
cout<<"请输入几个皇后: ";
cin>>n;
cout<<"共"<<nQueen(n)<<"个解"<<endl;
return 0;
}