第1关:非递归实现皇后问题#include <stdio.h> /********** Begin **********/ void main() { } /********** End **********/
时间: 2023-11-25 07:51:25 浏览: 533
皇后问题是指在一个n×n的棋盘上放置n个皇后,使得皇后之间互相不能攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。下面是一个非递归实现皇后问题的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100
int n, ans, cur;
int col[MAXN], d1[MAXN * 2], d2[MAXN * 2];
struct Node {
int row, col;
} stack[MAXN];
void push(int row, int col) {
stack[cur].row = row;
stack[cur].col = col;
cur++;
col[row] = d1[row + col] = d2[row - col + n] = 1;
}
void pop() {
cur--;
int row = stack[cur].row;
int col = stack[cur].col;
col[row] = d1[row + col] = d2[row - col + n] = 0;
}
void dfs() {
while (cur > 0 || stack[0].row < n) {
if (stack[cur - 1].row == n - 1) {
ans++;
pop();
} else {
int row = stack[cur - 1].row + 1;
int col = 0;
while (col < n && (col[row] || d1[row + col] || d2[row - col + n])) {
col++;
}
if (col < n) {
push(row, col);
} else {
pop();
}
}
}
}
int main() {
scanf("%d", &n);
dfs();
printf("%d\n", ans);
return 0;
}
```
阅读全文