用C语言代码实现n皇后的棋盘画法
时间: 2023-09-16 14:06:30 浏览: 87
非常棒的问题!以下是用C语言代码实现n皇后的棋盘画法的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 20
int n; // 皇后数量
// 检查皇后是否在同一列或在同一对角线上
int check(int* p, int i, int j)
{
int k;
for (k = 0; k < i; k++) {
if (p[k] == j || abs(k - i) == abs(p[k] - j)) {
return 0;
}
}
return 1;
}
// 递归绘制棋盘
void draw(int* p, int i, int j)
{
int k, l;
for (k = 0; k < n; k++) {
if (check(p, i, k)) {
p[i] = k;
if (i < n - 1) {
draw(p, i + 1, j);
}
else {
printf("%d:", ++j);
for (l = 0; l < n; l++) {
printf(" %d", p[l] + 1);
}
printf("\n");
}
}
}
}
int main()
{
int i = 0, j = 0;
printf("请输入皇后数量n(1 <= n <= %d):", MAX_N);
scanf("%d", &n);
if (n <= 0 || n > MAX_N) {
printf("error: 皇后数量n应在1至%d之间!\n", MAX_N);
return -1;
}
int* p = (int*)malloc(sizeof(int) * n);
draw(p, i, j);
free(p);
return 0;
}
```
希望这个示例代码对你有所帮助!如果你还有什么问题,请继续向我提问。
阅读全文