class nQueen
{
public:
nQueen():n(0){};
nQueen(int num);
void outputChess();
void getChess(int k);
private:
int n;
int *x;
};
nQueen::nQueen(int num)
{
n = num;
x = new int[n];
for(int i=0; i < n ;i++) x[i]=-1;
}
void nQueen::outputChess()
{
cout<<"get a chess"<<endl;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if (x[i]==j) cout<<"1 ";
else cout<<"0 ";
}
cout<<endl;
}
}
void nQueen::getChess(int k) //row k-1
{
if (k-1==n)
{
outputChess();
return ;
}
int t;
for(int i=0;i<n;i++) //col i
{
for(t=0;t<k-1;t++) //check if(k-1,i) conflicts with (t,x[t]) ,where 0<=t<k-1
{
if(x[t]==i)
break; //same col
if(x[t]-i==t-k+1||x[t]-i==k-1-t)
break;
}
if(t!=k-1) continue;
else
{
x[k-1]=i;
getChess(k+1);
}
}
return;
}

