#include <_dbdao.h>
#include <stdlib.h>
#include <stdio.h>
//同栏是否有皇后,1表示有
int column[9];
//右上至左下是否有皇后
int rup[17];
//左上至右下是否有皇后
int lup[17];
//解答
int queen[100];
//解答编号
int num;
void initial_Queen(){
for(int i=1;i<=8;i++){
column[i]=1;
}
for(int i=1;i<=2*8;i++){
rup[i]=lup[i]=1;
queen = new int[8+1];
}
}
void backtrack(int i){
bool condition = (i > 8);
if(condition == true){
showAnswer();
}
else{
for(int j=1;j<=8;j++){
if(column[j]==1&&rup[i+j]==1&&lup[i-j+8]==1){
queen[i]=j;//设定为占用
column[j]=rup[i+j]=lup[i-j+8]=0;
backtrack(i+1);
column[j]=rup[i+j]=lup[i-j+8]=1;
}
}
}
}
void showAnswer(){
num++;
putchar('\n');
printf("解答%d",num);
for(int y=1;y <= 8; y+=1){
for(int x=1; x <= 8; x+=1){
if(queen[y]==x){
printf("Q");
}
else{
printf("X");
}
}
putchar('\n');
}
}
int main(void) {
initial_Queen();
backtrack(1);
return 0;
}