社区讨论

四年级小朋友的思路

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 条回复,欢迎继续交流。

正在加载回复...