#include<stdio.h>
int place[8]={0};//用来记录第n个皇后所在的列;
bool flag[8]={1,1,1,1,1,1,1,1};//用来宣布第col列已经被占领;
bool d1[15]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};//用来宣布第n个皇后的右上方向对角线已经被占领;
bool d2[15]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};//用来宣布第n个皇后的左上方向对角线已经被占领;
int number;//用来记录当前结果是第几组
void ganerate(int n);
void print();
int main(){
ganerate(0);
}
void ganerate(int n){
int col;
for(col=0;col<8;col++){
if(flag[col]&&d1[n-col+7]&&d2[n+col]){//如过列,上斜,下斜都没有被占领,则放置第n个皇后
place[n]=col;//表示第n个皇后的位置
flag[col]=false;//表示此列已经被占领
d1[n-col+7]=false;//表示此条右向对角线已经被占领
d2[n+col]=false;//表示此条左向对角巷已经被占领
if(n<7){
ganerate(n+1);
}else{
//打印此组结果
print();
}
//回溯处理
flag[col]=1;
d1[n-col+7]=1;
d2[n+col]=1;
}
}
}
void print(){
number++;
int num[8][8]={0};
printf("N0.%d\n",number);
for(int i=0;i<8;i++){
//初始化皇后所在的位置为1;
num[i][place[i]]=1;
}
//打印
for(int i=0;i<8;i++){
for(int j=0;j<8;j++){
printf("%d ",num[i][j]);
}
printf("\n");
}
}
【八皇后问题】(c语言代码版)
最新推荐文章于 2023-12-06 19:14:17 发布