n皇后问题,用C++写代码解决
时间: 2024-05-08 17:19:38 浏览: 22
n皇后问题是一个著名的搜索问题,其目标是在 n x n 的国际象棋棋盘上放置 n 个皇后,使得它们不能互相攻击。在这个问题中,皇后可以攻击同一行、同一列或同一斜线上的任何单位。
下面是一个用 C 语言实现的递归函数,用于解决 n 皇后问题。在这个函数中,参数 queens 数组用于存储当前摆放的皇后的位置,row 表示当前要放置皇后的行,n 表示棋盘的大小。
```
#include <stdio.h>
#include <stdbool.h>
// 返回 true 表示 (row, col) 这个位置可以放置皇后
bool is_safe(int queens[], int row, int col, int n) {
// 检查列是否合法
for (int i = 0; i < row; i++) {
if (queens[i] == col) {
return false;
}
}
// 检查左上方是否合法
for (int i = row, j = col; i >= 0 && j >= 0; i--, j--) {
if (queens[i] == j) {
return false;
}
}
// 检查右上方是否合法
for (int i = row, j = col; i >= 0 && j < n; i--, j++) {
if (queens[i] == j) {
return false;
}
}
return true;
}
// 递归函数,尝试在第 row 行放置皇后
bool solve_n_queens(int queens[], int row, int n) {
if (row == n) {
// 找到了一组解,打印输出
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (queens[i] == j) {
printf("Q
阅读全文