n皇后问题c语言
时间: 2023-08-13 15:13:29 浏览: 154
n皇后问题(c 语言)
n皇后问题是经典的回溯算法问题,可以用C语言实现。以下是一种可能的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 8 // N皇后问题中的N
int board[N]; // 棋盘,board[i]表示第i行的皇后放在第board[i]列上
void print_board() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (board[i] == j) {
printf("Q ");
} else {
printf(". ");
}
}
printf("\n");
}
printf("\n");
}
int is_valid(int row, int col) {
for (int i = 0; i < row; i++) {
if (board[i] == col || abs(i - row) == abs(board[i] - col)) { // 同列或同对角线上已有皇后
return 0;
}
}
return 1;
}
void solve(int row) {
if (row == N) { // 找到一组解
print_board();
return;
}
for (int i = 0; i < N; i++) {
if (is_valid(row, i)) {
board[row] = i;
solve(row + 1);
board[row] = -1;
}
}
}
int main() {
for (int i = 0; i < N; i++) {
board[i] = -1; // 初始化棋盘
}
solve(0);
return 0;
}
```
该程序在输出所有解的同时,也会输出每个解的棋盘。
阅读全文