1 //八皇后递归解法 2 #include<iostream> 3 using namespace std; 4 int queen[9]={-1,-1,-1,-1,-1,-1,-1,-1,-1}; 5 int count=0; 6 bool available(int pointi,int pointj){//判断某个皇后是否与已有皇后冲突 7 for(int i=1;i<pointi;i++){ 8 if(pointj==queen[i])return false;//同一列拒绝 9 if((pointi-i)==(pointj-queen[i]))return false;//同一主对角线拒绝 10 if((pointi-i)+(pointj-queen[i])==0)return false;//同一副对角线拒绝 11 } 12 return true; 13 } 14 void findSpace(int queenNumber){//在第queenNumber行找能放皇后的位置 15 for(int i=1;i<9;i++){//从1~8遍历这一行的八个空位 16 if(available(queenNumber,i)){ 17 //如果可以放这个位置就记录下第queenNumber个皇后的位置 18 queen[queenNumber]=i; 19 if(queenNumber==8){//如果八个皇后都放满了统计一下 20 count++; 21 return; 22 } 23 int nextNumber=queenNumber+1;//还有皇后没放递归放下一个皇后 24 findSpace(nextNumber); 25 } 26 } 27 queen[--queenNumber]=-1;//如果这一行没有可放的位置说明上一行皇后放的位置不行,要为上一个皇后寻找新的可放位置 28 return; 29 } 30 int main(){ 31 findSpace(1);//从(1,1)开始递归 32 cout<<count<<endl; 33 return 0; 34 }