class NQueen
{
private:
int *x;
int n;
int sum;
public:
NQueen(int nQueen);
bool Place (int i,int j);
void BackTrack(int i);
void Display();
~NQueen();
};
NQueen::NQueen(int nQueen)
{
sum = 0;
n = nQueen;
x = new int[n];
for(int i=0;i<=n-1;i++)
{
x[0] = i;
BackTrack(1);
}
}
bool NQueen::Place(int i,int j)
{
for(int k = 0;k<i;k++)
{
if( (((abs(x[k]-j))==(abs(i-k)))) || x[k]==j)
return false;
}
return true;
}
void NQueen::BackTrack(int i)
{
if(i==n)
{
sum=sum+1;
}
else
{
for(int j=0;j<=n-1;j++)
{
if(Place(i,j))
{
x[i] = j;
BackTrack(i+1);
}
}
}
}
void NQueen::Display()
{
cout<<"共有"<<sum<<"中排列可能!"<<endl;
}
NQueen::~NQueen()
{
delete x;
}
int _tmain(int argc, _TCHAR* argv[])
{
NQueen queen(8);
queen.Display();
return 0;
}
{
private:
int *x;
int n;
int sum;
public:
NQueen(int nQueen);
bool Place (int i,int j);
void BackTrack(int i);
void Display();
~NQueen();
};
NQueen::NQueen(int nQueen)
{
sum = 0;
n = nQueen;
x = new int[n];
for(int i=0;i<=n-1;i++)
{
x[0] = i;
BackTrack(1);
}
}
bool NQueen::Place(int i,int j)
{
for(int k = 0;k<i;k++)
{
if( (((abs(x[k]-j))==(abs(i-k)))) || x[k]==j)
return false;
}
return true;
}
void NQueen::BackTrack(int i)
{
if(i==n)
{
sum=sum+1;
}
else
{
for(int j=0;j<=n-1;j++)
{
if(Place(i,j))
{
x[i] = j;
BackTrack(i+1);
}
}
}
}
void NQueen::Display()
{
cout<<"共有"<<sum<<"中排列可能!"<<endl;
}
NQueen::~NQueen()
{
delete x;
}
int _tmain(int argc, _TCHAR* argv[])
{
NQueen queen(8);
queen.Display();
return 0;
}