#include<iostream> using namespace std; #define N 8 //改成8就是八皇后了 class Queen { friend int nQueen(int); private: void Print(int x[]); bool Place(int k); void Backtrack(int t); int n, *x; long sum; }; bool Queen::Place(int k) { int j; for(j=1;j<k;j++) if((abs(k-j)==abs(x[j]-x[k]))||(x[j]==x[k]))return false; return true; } void Queen::Backtrack(int t) { int i; if(t>n) { sum++; Print(x); } else for(i=1;i<=n;i++) { x[t]=i; if(Place(t))Backtrack(t+1); } } void Queen::Print(int x[]) { for(int i = 1;i <= n; i++){ for(int j = 1;j != x[i]; j++) cout << "0 "; cout << "1 "; for(int k = x[i] + 1;k <= n; k++) cout << "0 "; cout << endl; } cout << endl << endl << endl; } int nQueen(int n) { int *p,i; Queen X; X.n=n; X.sum=0; p=new int[n+1]; for(i=0;i<=n;i++) p[i]=0; X.x=p; X.Backtrack(1); delete []p; return X.sum; } void main() { cout<<"共有方案数为:"<<nQueen(N)<<endl; getchar(); } 能知道有几组解!