#include <stdio.h>
#include <conio.h>
void Queen();
void print();
int colflag[8],upflag[15],downflag[15];
int n=0;
char a[8][8];
void Queen(int row)
{
int col;
for(col=0;col<8;col++)
if(colflag[col] && upflag[col+row] && downflag[row-col+7])
{
colflag[col]=0;upflag[col+row]=0;downflag[row-col+7]=0;
a[row][col]='@';
if(row==7)
print();
else
Queen(row+1);
//如果前次的皇后放置导致后面的放置无论如何都不能满足要求,则回溯,重置
colflag[col]=1;upflag[col+row]=1;downflag[row-col+7]=1;
a[row][col]='*';
}
row--;
}
void print()
{
n++;
printf("%d/n",n);
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
printf("%c ",a[i][j]);
printf("/n");
}
printf("press any key to continue/n");
getch();
}
void main()
{
for(int i=0;i<8;i++)
{
colflag[i]=1;
for(int j=0;j<8;j++)
a[i][j]='*';
}
for(i=0;i<15;i++)
{
upflag[i]=1;
downflag[i]=1;
}
Queen(0);
}