#include<stdio.h>
int val[8][8]={0},count=0;
bool judge(int row,int col)//对棋盘进行判断如果违反规则就返回错误
{
int i,j;
for(i=0;i<row;i++)
{
if(val[i][col]==1)//判断当前列
return false;
}
for(i=row,j=col;i>=0&&j>=0;i--,j--)//判断正对角线
{
if(val[i][j]==1)
return false;
}
for(i=row,j=col;i>=0&&j<8;i--,j++)//判断反对角线
{
if(val[i][j]==1)
return false;
}
return true;
}
void Putqueen(int row)
{
int i;
if(row==8)//这时棋盘走完进行计数
{
count++;
return;
}
for(i=0;i<8;i++)
{
if(judge(row,i))
{
val[row][i] = 1; //标记
Putqueen(row + 1); //下一层
val[row][i] = 0; //去标记
}
}
}
int main()
{
Putqueen(0);
printf("%d\n",count);
return 0;
}