问题简介:
在一个4×4的棋盘上,任意两个皇后都不能处在同一行、同一列 任意两个皇后都不能处在同一斜线上(主斜线、反斜线)。
题目分析:
1.假设第一个皇后在(1,1):
1)在x=3时会卡死
2)在x=4时会卡死
2.假设第一个皇后在(2,1):
1)顺利通过
3.假设第一个皇后在(3,1)
1)顺利通过
4.假设第一个皇后在(4,1)
1)在x=4时会卡死
2)在x=3时会卡死
代码实现:
#include <bits/stdc++.h>
using namespace std;
int c[10],z[20],f[20],ans;
void queen(int k){
if(k==5){
ans++;
return ;
}
for(int j=1;j<=4;j++){
if(c[j]==0&&z[k-j+4]&&f[k+j]==0){
c[j]=z[k-j+4]=f[k+j]=1;
queen(k+1);
c[j]=z[k-j+4]=f[k+j]=0;
}
}
}
int main()
{
queen(1);
cout<<ans;
return 0;
}
end
标签:int,斜线,C++,假设,回溯,皇后,卡死,例题,时会 From: https://blog.csdn.net/2301_79367516/article/details/140890247