10
#include <iostream> #include <math.h> using namespace std; int N; //皇后数 int Queen[11]; //皇后位置,下标表示行数,数值表示列数 int count=0; //不同放置次数 int a[12]; //存放count数 bool check(int x){ //检查当前行之前的行,判断是否有位于同一列的或者同一斜线的 int i; for(i=0;i<x;i++){ if(Queen[x]==Queen[i]||abs(Queen[i]-Queen[x])==abs(x-i)) return false; } return true; } void Nqueen(int n){ //n为当前行数 int i; for(i=0;i<N;i++){ Queen[n]=i; if(check(n)){ if(n==N-1){ count++; return; }else{ Nqueen(n+1); } } } } int main(){ int i,j; for(i=1;i<=10;i++){ count=0; N=i; Nqueen(0); a[i]=count; } while(cin>>j){ if(j==0) break; else cout<<a[j]<<endl; } return 0; }