设计一个n皇后问题算法,给出c代码
时间: 2023-11-18 22:10:31 浏览: 85
算法分析与设计实验五 N皇后-实验报告.docx
5星 · 资源好评率100%
下面是一个基于回溯法的 n 皇后问题求解的 C 代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 8 // 皇后数量
int board[N] = {0}; // 棋盘上每一行放置了皇后的列号
// 判断当前位置能否放置皇后
int canPlace(int row, int col) {
int i;
for (i = 0; i < row; i++) {
if (board[i] == col || abs(board[i] - col) == abs(i - row)) {
return 0;
}
}
return 1;
}
// 打印棋盘
void printBoard() {
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
if (board[i] == j) {
printf("Q ");
} else {
printf(". ");
}
}
printf("\n");
}
printf("\n");
}
// 求解 n 皇后问题
void solveNQueens(int row) {
int i, j;
if (row == N) {
printBoard();
return;
}
for (i = 0; i < N; i++) {
if (canPlace(row, i)) {
board[row] = i;
solveNQueens(row + 1);
}
}
}
int main() {
solveNQueens(0);
return 0;
}
```
在程序中,我们首先定义了一个 board 数组,表示棋盘上每一行放置了皇后的列号。canPlace 函数用于判断当前位置能否放置皇后,如果能放置就返回 1,否则返回 0。printBoard 函数用于打印棋盘。solveNQueens 函数用于求解 n 皇后问题,其中的回溯算法是核心部分。在主函数中,我们调用 solveNQueens 函数进行求解。
阅读全文