#include <iostream>
using namespace std;
class Queue{
friend int nQueue(int n);
private:
bool place(int k);
void backTrack(int t);
int n,
*x,
sum;
};
bool Queue::place(int k){
for(int j=1;j<k;j++)
if((abs(k-j)==abs(x[k]-x[j]))||(x[j]==x[k]))
return false;
return true;
}
void Queue::backTrack(int t){
if(t>n){
sum++;
for(int i=1;i<=n;i++)
cout<<x[i]<<" ";
cout<<endl;
}else{
for(int i=1;i<=n;i++){
x[t]=i;
if(place(t))
backTrack(t+1);
}
}
}
int nQueue(int n){
Queue 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()
{
cout<<nQueue(4)<<endl;
system("pause");
return 0;
}
N皇后问题
最新推荐文章于 2024-04-18 08:15:00 发布