/*八皇后问题*/
#include<stdio.h>
bool col[20],x[20],y[20]; //col是第几列 x是左下~右上 y是左上~右下
int ans=0;
bool check(int r,int i){
return !col[i]&&!x[r+i]&&!y[r-i+8];
}
void dfs(int r){ //r是行,i是列
int i=0;
if(r==8){
ans++;
return;
}
for(i=0;i<8;i++){
if(check(r,i)){ //check是判断是否这个位置是否能放
col[i]=true; //第i列标记有了
x[r+i]=true; //1,3 和3,1 左下到右上的对角线的坐标和和和都是相等的
y[r-i+8]=true; //左上到右下相同的那条对角线上坐标值值值是相等得
dfs(r+1); //行+1
col[i]=false; //如果不行就恢复原样
x[r+i]=false; //如果不行就恢复原样
y[r-i+8]=false;//如果不行就恢复原样
}
}
}
int main(){
dfs(0);
printf("%d",ans);
return 0;
}
八皇后问题
最新推荐文章于 2023-07-07 14:04:01 发布