社区讨论
四年级小朋友的思路
P1219[USACO1.5] 八皇后 Checker Challenge参与者 12已保存回复 19
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 17 条
- 当前快照
- 1 份
- 快照标识符
- @lzi10b8q
- 此快照首次捕获于
- 2024/08/06 14:15 2 年前
- 此快照最后确认于
- 2024/08/06 14:27 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
int n;
int a[15][15];
vector<int> ans;
int cnt = 0;
void attack(int x, int y, int v) {
for (int i = 1; i <= n; i++) a[x][i] += v;
for (int i = 1; i <= n; i++) a[i][y] += v;
for (int i = x, j = y; i >= 1 && j >= 1; i--, j--) a[i][j] += v;
for (int i = x, j = y; i <= n && j >= 1; i++, j--) a[i][j] += v;
for (int i = x, j = y; i <= n && j <= n; i++, j++) a[i][j] += v;
for (int i = x, j = y; i >= 1 && j <= n; i--, j++) a[i][j] += v;
a[x][y] -= (5 * v); // 抵消前面多加的5次
}
void dfs(int dep) {
if (dep > n) {
if (++cnt <= 3) {
for (int i : ans) cout << i << " ";
cout << endl;
}
return;
}
for (int i = 1; i <= n; i++) {
if (a[dep][i]) continue;
ans.push_back(i);
attack(dep, i, 1);
dfs(dep + 1);
ans.pop_back();
attack(dep, i, -1);
}
}
int main() {
cin >> n;
dfs(1);
cout << cnt;
return 0;
}
回复
共 19 条回复,欢迎继续交流。
正在加载回复...