#include<cstdio>#include<cmath>#include<algorithm>
using namespace std;constint n =8;int x[n +1], num =0;//皇后的位置用列值来表示,下标为行数,值为列
bool isPlace(int k){for(int i =1; i < k; i++){if(x[i]== x[k]||(abs(x[i]- x[k])==abs(i - k))){return false;}}return true;}voidNQueens(){int k =1;while(k >=1){
x[k]++;while(x[k]<= n &&(!isPlace(k))) x[k]++;//第k行第x[k]列不能放, if(x[k]<= n){if(k < n){
k++;}else{
num++;for(int i =1; i <= n; i++){printf("(%d, %d) ", i, x[i]);}printf("\n");}}else{
x[k--]=0;//当前行不能放,归0且回到上一行 }}}voidNQueensR(int k){//递归
x[k]=0;while(1){
x[k]++;while(x[k]<= n &&(!isPlace(k))) x[k]++;//第k行第x[k]列不能放, if(x[k]<= n){if(k < n){NQueensR(k +1);}else{
num++;for(int i =1; i <= n; i++){printf("(%d, %d) ", i, x[i]);}printf("\n");}}else{return;}}}intmain(){fill(x, x + n +1,0);NQueens();//非递归 printf("%d\n", num);fill(x, x + n +1,0);
num =0;NQueensR(1);//递归 printf("%d\n", num);return0;}