用c++解决八皇后问题
时间: 2024-01-03 14:05:05 浏览: 84
好的,八皇后问题可以使用回溯算法来解决。以下是用 C 语言实现八皇后问题的代码:
```
#include <stdio.h>
#include <stdbool.h>
#define N 8
bool is_valid(int board[N][N], int row, int col) {
int i, j;
// 检查当前列是否有皇后
for (i = 0; i < row; i++) {
if (board[i][col]) {
return false;
}
}
// 检查左上方是否有皇后
for (i = row, j = col; i >= 0 && j >= 0; i--, j--) {
if (board[i][j]) {
return false;
}
}
// 检查右上方是否有皇后
for (i = row, j = col; i >= 0 && j < N; i--, j++) {
if (board[i][j]) {
return false;
}
}
return true;
}
void print_solution(int board[N][N]) {
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%d ", board[i][j]);
}
printf("\n");
}
}
bool solve(int board[N][N], int row) {
if (row == N) {
// 找到了一组解
print_solution(board);
return true;
}
int col;
for (col = 0; col < N; col++) {
if (is_valid(board, row, col)) {
// 在当前位置放置皇后
board[row][col] = 1;
// 向下递归求解
if (solve(board, row + 1)) {
return true;
}
// 回溯
board[row][col] = 0;
}
}
// 没有找到解
return false;
}
int main() {
int board[N][N] = {0};
solve(board, 0);
return 0;
}
```
这个程序可以输出八皇后问题的所有解。具体实现思路是:从第一行开始,一行一行地往下放置皇后,每放置一行就检查是否合法,如果合法就递归向下一行求解,如果没找到解就回溯。
阅读全文