社区讨论
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 条回复,欢迎继续交流。
正在加载回复...