#include<stdio.h>
#include<math.h>
#define n 8
int x[n+1], sum;
enum boolean{FALSE,TRUE};
typedef enum bolean Bool;
Bool place (int);
void backtrack(void);
int main ()
{
int i;
for(i=0;i<n;i++)
x[i]=0;
backtrack();
printf("%d 皇后解的数目是%d\n",n,sum);
}
Bool 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 backtrack ()
{
int k=1;
x[1]=0;
while(k>0)
{
x[k]+=1;
while ((x[k]<=n)&&!(place (k)))
x[k]+=1;
if(x[k]<=n)
if(k==n)
sum++;
else
{
k++;
x[k]=0;
}
else k--;
}
}