n后问题回溯法c语言代码
时间: 2023-11-13 12:05:07 浏览: 87
以下是 N 皇后问题的回溯法 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 8
int board[N][N];
void print_board() {
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%d ", board[i][j]);
}
printf("\n");
}
}
int is_safe(int row, int col) {
int i, j;
// 检查行
for (i = 0; i < col; i++) {
if (board[row][i]) {
return 0;
}
}
// 检查左上角对角线
for (i = row, j = col; i >= 0 && j >= 0; i--, j--) {
if (board[i][j]) {
return 0;
}
}
// 检查左下角对角线
for (i = row, j = col; j >= 0 && i < N; i++, j--) {
if (board[i][j]) {
return 0;
}
}
return 1;
}
int solve(int col) {
if (col >= N) {
return 1;
}
int i, j;
for (i = 0; i < N; i++) {
if (is_safe(i, col)) {
board[i][col] = 1;
if (solve(col + 1)) {
return 1;
}
board[i][col] = 0;
}
}
return 0;
}
int main() {
int i, j;
// 初始化棋盘
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
board[i][j] = 0;
}
}
if (solve(0)) {
print_board();
} else {
printf("No solution found\n");
}
return 0;
}
```
在此代码中,`board` 数组用于存储棋盘上每个位置是否有皇后。`is_safe` 函数用于检查在给定位置放置皇后是否安全,即是否与已经放置的皇后冲突。`solve` 函数使用回溯法来递归地尝试在每一列放置皇后,直到找到一个解或者所有列都已经尝试过。`print_board` 函数用于将最终的棋盘打印出来。
阅读全文