int total = 0;
int arr[8][8] = {0};
void printQueue()
{
int i,j;
for (i=0; i<8; i++)
{
for(j=0; j<8; j++)
printf("%d\t",arr[i][j]);
printf("\n");
}
printf("\n");
printf("\n");
}
int checkQueue(int row, int col)
{
int i,j;
//row check, not need
for (j=0; j<8; j++)
{
if (arr[row][j] == 1)
return 0;
}
//col check
for (i=0; i<8; i++)
{
if (arr[i][col] == 1)
return 0;
}
//left diagonal check
for(i=row-1,j=col-1; i>=0 && j>=0; i--,j--)
{
if (arr[i][j] == 1)
return 0;
}
//right diagonal check
for(i=row-1,j=col+1; i>=0 && j<=7; i--,j++)
{
if (arr[i][j] == 1)
return 0;
}
return 1;
}
void findQueue(int row)
{
if (row > 7)
{
total++;
printQueue();
return;
}
int i;
for (i=0; i<8; i++)
{
if (checkQueue(row,i))
{
arr[row][i] = 1;
findQueue(row+1);
arr[row][i] = 0;
}
}
}
int main()
{
findQueue(0);
printf("%d",total);
return 0;
}