leetcode 51. N 皇后

2023.7.24

leetcode 51. N 皇后_第1张图片

        回溯经典应用“N皇后”问题。 本题依旧是利用回溯来做,将棋盘是放在一个vector数组里面,棋盘的行数代表树的高度,棋盘的列数代表树的宽度。 还需要定义一个辅助函数valid用于判断当前棋盘符不符合条件。

        下面上代码:

class Solution {
public:
    vector> ans;
    bool valid(int row,int col,int n, vector&chessboard)
    {
        //检查上方
        for(int i=0; i=0&&j>=0; i--,j--)
        {
            if(chessboard[i][j]=='Q') return false;
        }
        //检查右上方
        for(int i=row-1,j=col+1; i>=0&&j&chessboard)
    {
        //中止条件
        if(row == n)
        {
            ans.push_back(chessboard);
            return;
        }
        for(int col=0; col> solveNQueens(int n) {
        vector chessboard(n,string(n,'.'));//初始化棋盘为全"."
        backtrack(n,0,chessboard);
        return ans;
    }
};

        ps:由于递归是从上往下、每行只会放一个皇后,所以valid函数不需要检查行方向和下方,只需要检查上、左上、右上方向即可。

你可能感兴趣的:(leetcode专栏,leetcode,算法,职场和发展,数据结构,c++)