提交时间:2026-04-03 14:56:11
运行 ID: 86479
#include <iostream> #include <cstring> #include <cstdlib> using namespace std; const int N = 8; int queen[N]; int cnt = 0; // 判断位置是否合法 bool isSafe(int row, int col) { for (int i = 0; i < row; i++) { if (queen[i] == col || abs(row - i) == abs(col - queen[i])) return false; } return true; } // 回溯 void backtrack(int row) { // 只输出前 4 个解!关键修改 if (cnt >= 4) return; if (row == N) { cnt++; cout << "No. " << cnt << 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); // 找到 4 个就直接退出所有递归 if (cnt >= 4) return; } } } int main() { memset(queen, 0, sizeof(queen)); backtrack(0); return 0; }