#pragma once
#include <stdio.h>
#include <math.h>
#define len 8
int m = 0;
void printp(int p[len][len]) {
printf("ponit:\n");
for (int i = 0; i < len; i++) {
for (int j = 0; j < len; j++) {
printf("%d ", p[i][j]);
}
printf("\n");
}
}
int isCan(int row, int colume,int p[]) {
for (int i = 0; i < row; i++) {
if (p[i] == colume) return 0;
if (abs(row-i) == abs(colume-p[i])) return 0;
}
return 1;
}
void run(int row,int p[]) {
for(int j =0; j <len; j++){
if (isCan(row,j,p)) {
p[row] = j;
if (row == len - 1) {
printf("result:\n");
for (int i = 0; i < len; i++) {
for (int j = 0; j < len; j++) {
printf("%d ", p[i] == j ? 1 : 0);
}
printf("\n");
}
m++;
}
if (row < len - 1) {
run(row + 1, p);
}
}
}
}
void queen_main() {
int p[len];//每一行皇后的坐标
for (int i = 0; i < len; i++) {
p[i] = -1;
}
run(0,p);
printf("解法总数: %d", m);
}
c语言-8皇后问题
最新推荐文章于 2025-11-25 10:31:53 发布
该博客主要介绍了如何使用C语言实现N皇后问题的解决方案。通过`isCan`函数判断当前位置是否可以放置皇后,`run`函数递归地放置皇后,最终输出所有解法并计算解法总数。程序中定义了`queen_main`作为主入口,初始化棋盘并调用递归函数进行求解。
1032

被折叠的 条评论
为什么被折叠?



