提交时间:2026-04-03 14:55:27
运行 ID: 86477
#include <iostream> #include <cstring> using namespace std; // 全局变量:方便递归函数访问 const int N = 8; // 8皇后 int queen[N]; // queen[i] 表示第i行皇后所在的列号 int count = 0; // 统计解的数量 // 检查第row行第col列是否可以放皇后 bool isSafe(int row, int col) { // 遍历已经放置好的前row行 for (int i = 0; i < row; i++) { // 1. 同列 2. 对角线(行差=列差) if (queen[i] == col || abs(row - i) == abs(col - queen[i])) { return false; } } return true; } // 回溯函数:给第row行放置皇后 void backtrack(int row) { // 递归终止:8行都放完,找到一个解 if (row == N) { count++; // 按格式输出解 cout << "No. " << count << endl; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (queen[i] == j) { cout << "1 "; } else { cout << "0 "; } } cout << endl; } return; } // 尝试当前行的每一列 for (int col = 0; col < N; col++) { if (isSafe(row, col)) { queen[row] = col; // 放置皇后 backtrack(row + 1); // 递归放下一行 // 回溯:无需手动撤销,下一次循环会覆盖 } } } int main() { memset(queen, 0, sizeof(queen)); // 初始化数组 backtrack(0); // 从第0行开始放置 return 0; }