编辑
2024-09-23
算法题
00
请注意,本文编写于 229 天前,最后修改于 229 天前,其中某些信息可能已经过时。

今天重温八皇后!可以是回溯题必做,算法小白头疼!https://www.luogu.com.cn/problem/P1219

这题是简化版!

cpp
#include <iostream> using namespace std; const int MAXN = 13; int n; int queens[MAXN]; // queens[i] 表示第 i 行的棋子放在第 queens[i] 列 bool columns[MAXN], diag1[2 * MAXN - 1], diag2[2 * MAXN - 1]; int solutionCount = 0; void printSolution() { for (int i = 0; i < n; ++i) { cout << queens[i] + 1 << " "; } cout << endl; } void solve(int row) { if (row == n) { // 找到一个解 solutionCount++; if (solutionCount <= 3) { printSolution(); } return; } for (int col = 0; col < n; ++col) { if (!columns[col] && !diag1[row + col] && !diag2[row - col + n - 1]) { // 放置棋子 queens[row] = col; columns[col] = diag1[row + col] = diag2[row - col + n - 1] = true; // 递归下一行 solve(row + 1); // 回溯 columns[col] = diag1[row + col] = diag2[row - col + n - 1] = false; } } } int main() { cin >> n; // 初始化 for (int i = 0; i < n; ++i) { columns[i] = false; } for (int i = 0; i < 2 * n - 1; ++i) { diag1[i] = diag2[i] = false; } // 从第 0 行开始搜索 solve(0); // 输出解的总数 cout << solutionCount << endl; return 0; }

本文作者:yowayimono

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!