编辑代码

#include <stdio.h>
#include <stdbool.h>

void printQueens(int queens[], int n) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (queens[i] == j) {
                printf("1 ");
            } else {
                printf("0 ");
            }
        }
        printf("\n");
    }
    printf("\n");
}

bool isValid(int queens[], int row, int col) {
    for (int i = 0; i < row; i++) {
        // 检查与之前行的皇后是否冲突
        if (queens[i] == col || queens[i] - i == col - row || queens[i] + i == col + row) {
            return false;
        }
    }
    return true;
}

void backtrack(int queens[], int row, int n) {
    if (row == n) { // 所有行都放置好皇后,打印结果
        printQueens(queens, n);
        return;
    }

    for (int col = 0; col < n; col++) {
        if (isValid(queens, row, col)) {
            queens[row] = col; // 放置皇后
            backtrack(queens, row + 1, n); // 继续下一行的放置
        }
    }
}

void solveNQueens(int n) {
    int queens[n]; // 存储每一行皇后的列位置
    backtrack(queens, 0, n); // 从第0行开始放置皇后
}

int main() {
    int n = 4; // 设置皇后数量为4
    solveNQueens(n);
    return 0;
}