#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;}