
题目原文请移步下面的链接
搜索 、 深搜 、 回溯#include <bits/stdc++.h>
using namespace std;
#define endl '\n';
void print(int n, int &ans, vector<int> &row) {
int i;
++ans;
if (ans <= 3) {
for (i = 1; i <= n; ++i) {
cout << row[i] << " ";
}
cout << endl;
}
}
void dfs(int a, int n, int &ans, vector<int> &row, vector<int> &col, vector<int> &l_diag, vector<int> &r_diag) {
for (int i = 1; i <= n; ++i)
if (col[i] == 0 && l_diag[a + i] == 0 && r_diag[a - i + n] == 0) {
row[a] = i;
col[i] = 1;
l_diag[a + i] = 1;
r_diag[a - i + n] = 1;
if (a == n) {
print(n, ans, row);
} else {
dfs(a + 1, n, ans, row, col, l_diag, r_diag);
}
col[i] = 0;
l_diag[a + i] = 0;
r_diag[a - i + n] = 0;
}
}
void happy_coder() {
int n;
cin >> n;
vector<int> row(50);
vector<int> col(50);
vector<int> l_diag(50);
vector<int> r_diag(50);
int ans = 0;
dfs(1, n, ans, row, col, l_diag, r_diag);
cout << ans;
}
int main() {
// 提升cin、cout效率
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
// 小码匠
//best_coder();
// 最优解
happy_coder();
// 返回
return 0;
}