题解
八皇后问题
1 条题解
-
0
#include<bits/stdc++.h> using namespace std; int cs=1, q[10][10]; // cs: 次数(计数),q: 棋盘(qi pan) bool lie[10], dui1[20], dui2[20]; // lie: 列,dui1: 对角线1,dui2: 对角线2 // 检查(x行y列)是否可放皇后 bool jc(int x, int y){ // jc: 检查(jian cha) return !lie[y] && !dui1[x+y] && !dui2[x-y+8]; } // 深搜函数,step: 当前行数 void dfs(int step){ if(step == 9){ // 8行都放好皇后 cout << "No. " << cs++ << '\n'; for(int i=1; i<=8; i++){ // 按列输出 for(int j=1; j<=8; j++){ cout << q[j][i] << " "; } cout << '\n'; } return; } for(int l=1; l<=8; l++){ // l: 列(lie) if(jc(step, l)){ q[step][l] = 1; // 放皇后 lie[l] = dui1[step+l] = dui2[step-l+8] = true; // 标记占用 dfs(step + 1); // 下一行 lie[l] = dui1[step+l] = dui2[step-l+8] = false; // 回溯 q[step][l] = 0; // 撤皇后 } } } int main(){ memset(lie, false, sizeof(lie)); memset(dui1, false, sizeof(dui1)); memset(dui2, false, sizeof(dui2)); dfs(1); // 从第1行开始 return 0; }
- 1