用易语言可以做网站吗,西安外贸网站开发,商务 服务类网站模板,界面设计网站解析
经典大法师#xff08;dfs哈哈哈#xff09; 比较关键的是每条对角线上点的坐标之和或差是相同的#xff0c;故可以用一维数组存储其状态
这题一开始用了双层循环#xff0c;卡掉了4个点qwq 后来发现其实因为每行只有一个皇后#xff0c;每次单层循环枚举j就可以实…
解析
经典大法师dfs哈哈哈 比较关键的是每条对角线上点的坐标之和或差是相同的故可以用一维数组存储其状态
这题一开始用了双层循环卡掉了4个点qwq 后来发现其实因为每行只有一个皇后每次单层循环枚举j就可以实现的 于是代码就出来了
代码
#includecstdio
#includecmath
#includecstring
#includealgorithm
using namespace std;
int y[50]{ },he[50]{ },ca[50]{ },tot0,ans[20];
int n;
void dfs(int num,int I){//I记录放到第几个皇后第几行if(numn){tot;if(tot3){for(int i1;in;i){printf(%d ,ans[i]);}printf(\n);}return;}for(int j1;jn;j){//这里只需要单层即可if(y[j]0he[Ij]0ca[I-jn]0){y[j]1;he[Ij]1;ca[I-jn]1;ans[num]j;dfs(num1,I1);y[j]0;he[Ij]0;ca[I-jn]0;}}return;
}
int main() {scanf(%d,n);dfs(1,1);printf(%d,tot);return 0;
}