1.找出第一种正确摆放方式,也就是深度优先遍历。
inta[8][8] = {0};
intnum=0;
bool check(int x,int y){
for(inti =0; i
if(a[x][i] ==1)returnfalse;
if(x-i-1>=0&&a[x-i-1][y-i-1] ==1)returnfalse;
if(x+1+i<8&&a[x+1+i][y-1-i] ==1)returnfalse;
}
return true;
}
void print(){
for(inti =0;i<8;++i){
for(intj =0;j<8;++j){
printf("%d",a[i][j]);
}
printf("\n");
}
printf("***********************");
printf("%d\n",++num);
}
bool queen(int y){
if(y >=8) {
print();
returntrue;
}
for(inti =0;i<8;++i){
for(intx =0;x<8;++x)a[x][y] =0;
if(check(i, y)){
a[i][y] =1;
if(queen(y+1))return true;
}
}
return false;
}
2.找出全部的正确摆放方式,也就是广度优先遍历。
核心代码变为:
void queen(int y){
if(y >= 8) {
print();
return;
}
for(int i = 0;i< 8;++i){
if(check(i, y)){
a[i][y] = 1;
queen(y+1);
a[i][y] = 0;
}
}
参考资料:https://blog.csdn.net/bjweimengshu/article/details/79386101
网友评论