c语言八皇后问题所有解法
时间: 2023-08-25 17:25:01 浏览: 98
C语言八皇后问题所有解
八皇后问题的所有解法是有限的,共有92种不同的解法。以下是一个使用C语言实现的八皇后问题求解程序,可以打印出所有的92种解法:
```c
#include <stdio.h>
#define N 8
int board[N][N];
int is_safe(int row, int col) {
int i, j;
// 检查同一列
for (i = 0; i < row; i++) {
if (board[i][col]) {
return 0;
}
}
// 检查左上方对角线
for (i = row, j = col; i >= 0 && j >= 0; i--, j--) {
if (board[i][j]) {
return 0;
}
}
// 检查右上方对角线
for (i = row, j = col; i >= 0 && j < N; i--, j++) {
if (board[i][j]) {
return 0;
}
}
// 该位置是安全的
return 1;
}
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");
}
printf("\n");
}
void solve(int row) {
int i;
if (row == N) {
// 所有皇后都已放置
print_board();
return;
}
for (i = 0; i < N; i++) {
if (is_safe(row, i)) {
// 放置皇后
board[row][i] = 1;
// 递归下一行
solve(row + 1);
// 回溯
board[row][i] = 0;
}
}
}
int main() {
solve(0);
return 0;
}
```
此代码实现了八皇后问题的求解程序,会打印出所有的92种解法,其中1表示皇后的位置,0表示空位置。这个程序使用了回溯算法,它会尝试在每一行中放置一个皇后,直到找到所有的解法。
阅读全文