#include<iostream> #include<conio.h> using namespace std; #define MAX 8 int sum=0; class QueenPuzzle { int queens[MAX]; public: void printOut(); int IsValid(int n); void placeQueen(int i); }; void QueenPuzzle::printOut() { for(int i=0;i<MAX;i++) { for(int j=0;j<MAX;j++) { if(j==queens[i]) cout<<"Q"; else cout<<"0"; } cout<<endl; } cout<<endl<<"按Q键盘退出,按其他键继续"<<endl<<endl; if(getch()=='q') exit(0); } void QueenPuzzle::placeQueen(int i) { for(int j=0;j<MAX;j++) { if(i==MAX) { sum++; cout<<"第"<<sum<<"组解:"<<endl; printOut(); return ; } queens[i]=j; if(IsValid(i)) placeQueen(i+1); } } int QueenPuzzle::IsValid(int n) { for(int i=0;i<n;i++) { if(queens[i]==queens[n]) return 0; if(abs(queens[i]-queens[n])==(n-i)) return 0; } return 1; } void main() { QueenPuzzle queen; queen.placeQueen(0); cout<<"共"<<sum<<"组解"<<endl; } 以上代码在VS2008下编译通过,总共输出92中解,非常的遗憾,这个问题是德国数学家高斯提出来的,他的结果是76。