社区讨论

N 皇后 的问题,最后一组数 TLE了,我该 如何优化 啊?

P1219[USACO1.5] 八皇后 Checker Challenge参与者 3已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@mi6ws0su
此快照首次捕获于
2025/11/20 12:05
4 个月前
此快照最后确认于
2025/11/20 12:05
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
bool vis[14][14];
int n, ansCount;
bool check(int x, int y, int r, int l, int u) {
	if (x + r >= n&&x - l<0 && y - u<0)
		return 1;															//这种情况 为真的情况下 
	if ((y - u >= 0) && ((x - l >= 0 && vis[y - u][x - l]) || (x + r<n&& vis[y - u][x + r])||vis[y-u][x])) {
		return 0;
	}
	return check(x, y, r + 1, l + 1, u + 1);
}
void dfs(int y) {
	if (y == n) {
		if (3>ansCount++) {
			for (int i = 0; i<n; ++i)
				for (int j = 0; j<n; ++j)
					if (vis[i][j])
						cout << j+1 << " ";
			cout << endl;
		}
		return;
	}
	for (int i = 0; i<n; ++i) {
		if (check(i, y, 1, 1, 1)) {
			vis[y][i] = 1;            //标记
			dfs(y + 1);
			vis[y][i] = 0;;
		}
	}
}
int main()
{
	cin >> n;
	dfs(0);
	cout << ansCount;
	return 0;
}

回复

5 条回复,欢迎继续交流。

正在加载回复...