0
点赞
收藏
分享

微信扫一扫

光储并网直流微电网simulink仿真模型,光伏采用mppt实现最大功率输出研究

题目

51. N 皇后

困难

相关标签

数组   回溯

按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。

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

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

每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。

示例 1:

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

示例 2:

输入:n = 1
输出:[["Q"]]

提示:

  • 1 <= n <= 9

思路和解题方法

复杂度

        时间复杂度:

                O(n!)

        空间复杂度

                O(n^2)

c++ 代码

class Solution {
public:
    vector<vector<string>> ans;  // 存储所有可行的 N 皇后方案
    
    void backtracking(int n, int row, vector<string> &chessboard)
    {
        if (row == n)  // 若已成功放置 N 个皇后,将当前棋盘加入答案数组
        {
            ans.push_back(chessboard);
            return;
        }
        
        for (int col = 0; col < n; col++)  // 在当前行的每一列尝试放置皇后
        {
            if (isvalid(row, col, chessboard, n))  // 若当前位置可放置皇后
            {
                chessboard[row][col] = 'Q';  // 放置皇后
                backtracking(n, row + 1, chessboard);  // 继续下一行的搜索
                chessboard[row][col] = '.';  // 回溯到上一步,取消该位置的皇后标记
            }
        }
    }
    
    bool isvalid(int row, int col, vector<string> &chessboard, int n)
    {
        for (int i = 0; i < row; i++)
        {
            if (chessboard[i][col] == 'Q')  // 检查当前列是否已经有皇后
                return false;
        }
        
        for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--)
        {
            if (chessboard[i][j] == 'Q')  // 检查左上方是否已经有皇后
                return false;
        }
        
        for (int i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++)
        {
            if (chessboard[i][j] == 'Q')  // 检查右上方是否已经有皇后
                return false;
        }
        
        return true;  // 当前位置可放置皇后
    }

    vector<vector<string>> solveNQueens(int n) {
        ans.clear();  // 清空答案数组
        vector<string> chessboard(n, string(n, '.'));  // 初始化棋盘
        backtracking(n, 0, chessboard);  // 调用回溯函数开始搜索
        return ans;  // 返回所有可行的 N 皇后方案
    }
};

觉得有用的话可以点点赞,支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦  >人<  。

举报

相关推荐

0 条评论