n皇后问题的递归算法c语言实现
时间: 2023-11-29 10:47:51 浏览: 98
以下是n皇后问题的递归算法c语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAXN 100
int n; // 皇后数量
int cnt; // 解法数量
int C[MAXN]; // C[i]表示第i行皇后所在的列编号
bool vis[MAXN]; // vis[i]表示第i列是否已经有皇后
void search(int cur) {
if (cur == n) { // 找到一个解法
cnt++;
return;
}
for (int i = 0; i < n; i++) {
if (!vis[i]) { // 第i列没有皇后
bool ok = true;
for (int j = 0; j < cur; j++) {
if (cur - j == abs(i - C[j])) { // 判断是否在同一对角线上
ok = false;
break;
}
}
if (ok) { // 可以放置皇后
C[cur] = i;
vis[i] = true;
search(cur + 1);
vis[i] = false;
}
}
}
}
int main() {
scanf("%d", &n);
search(0);
printf("%d\n", cnt);
return 0;
}
```
阅读全文