/* theme:八皇后 回溯算法 coder:瞿鹏志 time:2015.1.11 */ #include <iostream> using namespace std; #define N 15 #define M 8 class Eight_Queen{ private: int left[N]; int right[N]; int colm[M]; int cnt; public: Eight_Queen(){ int i; cnt=0; for(i=0;i<N;i++){ left[i]=right[i]=0; if(i<M) colm[i]=-1; } } void Queen(int i){ for(int j=0;j<M;j++){ if(left[i+j]!=1&&right[i-j+7]!=1&&colm[j]==-1){ colm[j]=i; left[i+j]=right[i-j+7]=1; if(i==M-1){ cnt++; }else{ Queen(i+1); } colm[j]=-1; left[i+j]=right[i-j+7]=0; }//end if }//end for } int GetCnt(){ return cnt; } }; int main(void) { Eight_Queen Queen1; Queen1.Queen(0); cout<<Queen1.GetCnt(); return 0; }