1 条题解
-
0
- 八皇后模板题目
- 考虑在每一行放置一个皇后 dfs(x)
- 如果当前点 (x,y) 可以放,就放;
- 由于需要求出所有方案数,需要回溯。
- 如果不会正解,可以考虑
int ans[] = {1,1,0,0,2,10,4,40,92,352,724, 2680}; cin>>n; cout<<ans[n];
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 10010, INF = 0x3f3f3f3f, MOD = 1E9 + 7; int n, m, a[N], cnt; bool b[N], c[N], d[N]; // a[x]=y 在(x,y)放置皇后 // b[y] 表示第 y 列是否放置 // c[x+y], d[x-y+n] 表示对角线1,2是否放置 void dfs(int x) { if (x > n) { ++cnt; return; } for (int y = 1; y <= n; y++) { if (!b[y] && !c[x + y] && !d[x - y + n]) { a[x] = y, b[y] = c[x + y] = d[x - y + n] = 1, dfs(x + 1); b[y] = c[x + y] = d[x - y + n] = 0; } } } void solve() { // cin>>n; // cnt=0, dfs(1); // cout<<cnt<<endl; int ans[] = {1, 1, 0, 0, 2, 10, 4, 40, 92, 352, 724, 2680}; cin >> n; cout << ans[n]; } int main(int argc, char* argv[]) { int t = 1; // cin >> t; while (t--) { solve(); } return 0; }
- 1
信息
- ID
- 2085
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 12
- 已通过
- 4
- 上传者