#include <stdio.h>
#define N 8
int board[N][N] = {0}; //创建一个8x8二维数组 board 来表示棋盘,其中 board[i][j] 表示第 i 行第 j 列是否放置了皇后。
/*
is_valid 函数来判断当前位置是否可以放置皇后,
如果该位置所在的列、主对角线或副对角线上已经存在皇后,则返回 0,否则返回 1
*/
int is_valid(int row, int col) {
for (int i = 0; i < row; i++) {
if (board[i][col]) {
return 0;
}
}
for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {
if (board[i][j]) {
return 0;
}
}
for (int i = row - 1, j = col + 1; i >= 0 && j < N; i--, j++) {
if (board[i][j]) {
return 0;
}
}
return 1;
}
/*
solve 函数来递归地搜索解空间,当搜索到第八行时,表示已经找到了一组解,输出棋盘状态。
*/
void solve(int row) {
if (row == N) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", board[i][j]);
}
printf("\n");
}
printf("\n");
return;
}
for (int i = 0; i < N; i++) {
if (is_valid(row, i)) {
board[row][i] = 1;
solve(row + 1);
board[row][i] = 0;
}
}
}
int main() {
solve(0);
return 0;
}
c语言 递归算法练习例程
最新推荐文章于 2024-08-25 18:17:58 发布