您好,欢迎来到星星旅游。
搜索
您的当前位置:首页【LeetCode】N 皇后 II

【LeetCode】N 皇后 II

来源:星星旅游


💐The Begin💐点点关注,收藏不迷路💐

n 皇后问题 研究的是如何将 n 个皇后放置在 n × n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。

示例 1:

输入:n = 4
输出:2
解释:如上图所示,4 皇后问题存在两个不同的解法。

示例 2:

输入:n = 1
输出:1

提示:

1 <= n <= 9

#include <stdio.h>
#include <stdlib.h>

// 检查当前位置 (row, col) 是否可以放置皇后
int isSafe(int *queens, int row, int col, int n) {
    for (int i = 0; i < row; i++) {
        // 检查同列或同一对角线上是否有皇后
        if (queens[i] == col || abs(queens[i] - col) == abs(i - row)) {
            return 0;
        }
    }
    return 1;
}

// 回溯函数,尝试放置皇后
void backtrack(int *queens, int row, int n, int *count) {
    if (row == n) {  // 当放置完 n 个皇后时,找到一种解决方案
        (*count)++;
        return;
    }
    for (int col = 0; col < n; col++) {
        if (isSafe(queens, row, col, n)) {  // 检查当前位置是否安全
            queens[row] = col;  // 在当前行的该列放置皇后
            // 递归放置下一行的皇后
            backtrack(queens, row + 1, n, count);
        }
    }
}

int totalNQueens(int n) {
    int *queens = (int *)malloc(n * sizeof(int));  // 存储皇后所在的列
    int count = 0;
    backtrack(queens, 0, n, &count);
    free(queens);  // 释放内存
    return count;
}



💐The End💐点点关注,收藏不迷路💐

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- stra.cn 版权所有 赣ICP备2024042791号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务