#include
<
iostream
>
#include < cmath >
using namespace std;
class nQueensPuzzle
... {
public:
nQueensPuzzle(int queens=8);
bool canPlaceQueen(int k,int i);
void queensConfiguration(int k);
void printConfiguration();
int solutionsCount();
private:
int noOfSolutions;
int noOfQueens;
int *queensInRow;
} ;
nQueensPuzzle::nQueensPuzzle( int queens) // 构造函数
... {
noOfQueens=queens;
queensInRow=new int[noOfQueens];
noOfSolutions=0;
}
bool nQueensPuzzle::canPlaceQueen( int k, int i) // 检查第k行第i列是否能放皇后
... {
for(int j=0;j<k;j++)
if((queensInRow[j]==i)||(abs(queensInRow[j]-i)==abs(j-k)))
return false;
return true;
}
void nQueensPuzzle::queensConfiguration( int k) // 如何放皇后,将所有的方法找出来
... {
for(int i=0;i<noOfQueens;i++)
...{
if(canPlaceQueen(k,i))
...{
queensInRow[k]=i;
if(k==noOfQueens-1)
printConfiguration();
else
queensConfiguration(k+1);
}
}
}
void nQueensPuzzle::printConfiguration() // 将每一种方法打印出来
... {
noOfSolutions++;
cout<<"(";
for(int i=0;i<noOfQueens-1;i++)
cout<<queensInRow[i]<<", ";
cout<<queensInRow[noOfQueens-1]<<")";
cout<<endl;
}
int nQueensPuzzle::solutionsCount() // 返回方法数
... {
return noOfSolutions;
}
void main()
... {
nQueensPuzzle queen(8); queen.queensConfiguration(0);
queen.printConfiguration();
cout<<"共有"<<queen.solutionsCount()<<"种方法。";
}
#include < iostream.h >
#include < math.h >
int sum = 0 ;
int x[ 9 ];
int place ( int t)
... {
for(int i=1;i<t;i++)
if(x[i]==x[t] ||abs(t-i)==abs(x[t]-x[i]))
return 0;
return 1;
}
void nQueen()
... {
int i,j,k=1;
for(i=0;i<9;i++)
x[i]=0;
while(k>0)
...{
x[k]++;
while(x[k]<=8&&!place(k))
x[k]++;
if(x[k]<=8)
...{
if(k==8)
...{
for(i=0;i<8;i++)
cout<<"+-";
cout<<"+ ";
for(i=1;i<=8;i++)
...{
for(j=1;j<=8;j++)
...{
if(j==x[i])
cout<<"|Q";
cout<<"| ";
}
cout<<" ";
}
for(i=0;i<8;i++)
cout<<"+-";
cout<<"+ ";
sum++;
}
else
...{
k++;
x[k]=0;
}
}
else
k--;
}
}
void main()
... {
nQueen();
cout<<endl;
cout<<"N皇后问题一共有"<<sum<<"种解法 "<<endl;
}
#include < cmath >
using namespace std;
class nQueensPuzzle
... {
public:
nQueensPuzzle(int queens=8);
bool canPlaceQueen(int k,int i);
void queensConfiguration(int k);
void printConfiguration();
int solutionsCount();
private:
int noOfSolutions;
int noOfQueens;
int *queensInRow;
} ;
nQueensPuzzle::nQueensPuzzle( int queens) // 构造函数
... {
noOfQueens=queens;
queensInRow=new int[noOfQueens];
noOfSolutions=0;
}
bool nQueensPuzzle::canPlaceQueen( int k, int i) // 检查第k行第i列是否能放皇后
... {
for(int j=0;j<k;j++)
if((queensInRow[j]==i)||(abs(queensInRow[j]-i)==abs(j-k)))
return false;
return true;
}
void nQueensPuzzle::queensConfiguration( int k) // 如何放皇后,将所有的方法找出来
... {
for(int i=0;i<noOfQueens;i++)
...{
if(canPlaceQueen(k,i))
...{
queensInRow[k]=i;
if(k==noOfQueens-1)
printConfiguration();
else
queensConfiguration(k+1);
}
}
}
void nQueensPuzzle::printConfiguration() // 将每一种方法打印出来
... {
noOfSolutions++;
cout<<"(";
for(int i=0;i<noOfQueens-1;i++)
cout<<queensInRow[i]<<", ";
cout<<queensInRow[noOfQueens-1]<<")";
cout<<endl;
}
int nQueensPuzzle::solutionsCount() // 返回方法数
... {
return noOfSolutions;
}
void main()
... {
nQueensPuzzle queen(8); queen.queensConfiguration(0);
queen.printConfiguration();
cout<<"共有"<<queen.solutionsCount()<<"种方法。";
}
#include < iostream.h >
#include < math.h >
int sum = 0 ;
int x[ 9 ];
int place ( int t)
... {
for(int i=1;i<t;i++)
if(x[i]==x[t] ||abs(t-i)==abs(x[t]-x[i]))
return 0;
return 1;
}
void nQueen()
... {
int i,j,k=1;
for(i=0;i<9;i++)
x[i]=0;
while(k>0)
...{
x[k]++;
while(x[k]<=8&&!place(k))
x[k]++;
if(x[k]<=8)
...{
if(k==8)
...{
for(i=0;i<8;i++)
cout<<"+-";
cout<<"+ ";
for(i=1;i<=8;i++)
...{
for(j=1;j<=8;j++)
...{
if(j==x[i])
cout<<"|Q";
cout<<"| ";
}
cout<<" ";
}
for(i=0;i<8;i++)
cout<<"+-";
cout<<"+ ";
sum++;
}
else
...{
k++;
x[k]=0;
}
}
else
k--;
}
}
void main()
... {
nQueen();
cout<<endl;
cout<<"N皇后问题一共有"<<sum<<"种解法 "<<endl;
}