二维数组n皇后问题c语言
时间: 2023-12-20 16:32:03 浏览: 65
C语言实现的皇后问题.rar_N Queen_c语言皇后问题_n 后问题_回溯算法_皇后
以下是使用二维数组解决n皇后问题的C语言代码示例:
```c
#include <stdio.h>
#define N 8
int queen_square[N][N];
// 检查在(row, col)位置放置皇后是否安全
int is_safe(int row, int col) {
int i, j;
// 检查当前列是否有其他皇后
for (i = 0; i < row; i++) {
if (queen_square[i][col] == 1) {
return 0;
}
}
// 检查左上方对角线是否有其他皇后
for (i = row, j = col; i >= 0 && j >= 0; i--, j--) {
if (queen_square[i][j] == 1) {
return 0;
}
}
// 检查右上方对角线是否有其他皇后
for (i = row, j = col; i >= 0 && j < N; i--, j++) {
if (queen_square[i][j] == 1) {
return 0;
}
}
return 1;
}
// 打印棋盘
void print_board() {
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%d ", queen_square[i][j]);
}
printf("\n");
}
printf("\n");
}
// 解决n皇后问题的递归函数
void solve(int row) {
int i;
if (row < N) {
for (i = 0; i < N; i++) {
if (is_safe(row, i)) {
queen_square[row][i] = 1; // 在(row, i)位置放置皇后
solve(row + 1); // 继续在下一行放置皇后
queen_square[row][i] = 0; // 回溯,移除皇后
}
}
} else {
print_board(); // 打印棋盘
}
}
int main() {
solve(0); // 从第0行开始解决n皇后问题
return 0;
}
```
阅读全文