求助!!!
tumd
2019-08-21 11:39:33
2019-08-21 11:41:09
这是一份提问帖的模板
我的思路
我的代码
#include <bits/stdc++.h>
using namespace std;
int z; // z:z个障碍;
struct{int x,y;}NO[65];
int tot;
int vis[3][8];
bool F(int x,int y) {
for (int i = 0;i < z; ++i) {
if (NO[i].x == x && NO[i].y == y) return 1;
}
return 0;
}
#ifdef DEBUG
void print(int n) {
for (int i = 0;i < n; ++i) {
for (int j = 0;j < n; ++j) {
printf("%d ", vis[0][j] ? 1 : 0);
}
puts("");
}
}
#endif
void queen(int nw,int n) { //n:n*n的格子
//printf("%d %d\n",nw,n);
if (nw == n)
{
++tot;
//print(n);
//puts("");
return;
}
for (int i = 0;i < n ; ++i) {
if (!vis[0][i] && !vis[1][nw + i] &&
!vis[2][nw - i + 7] && F(nw,i)){
vis[0][i] = vis[1][nw + i] = vis[2][nw - i + 7] = 1;
queen(nw + 1,n);
vis[0][i] = vis[1][nw + i] = vis[2][nw - i + 7] = 0;
}
}
}
int main() {
int n;
scanf("%d%d", &n, &z); //n:n*n的格子
for (int i = 0;i < z; ++i) {
scanf("%d%d", &NO[i].x, &NO[i].y);
}
queen(0,n);
printf("%d", tot);
return 0;
}
我的问题
- 我觉得问题出在 queen 函数的 if 语句。
- 所以我打印了 n,nw 的值。
- 但是,。
- 所以我觉得很奇怪。
特发此帖
共 5 条回复
谢谢
最好开大一点,比如vis[3][20],因为nw-i+7最大7-0+7=14。
还有,以后发具体题目时最好发题目板块。 (点开题库,点开题目,在里面点讨论(最后一个,棕色))
我正好也做这道题,看到了回复一个【滑稽】
优化
可改为:
问题
对比一下:
你的F函数返回true是不符合,所以queen调用时应写**!F(nw,i)**。