代码随想录:N皇后
经典回溯,不难,就是棋盘的x和y经常搞不清
class Solution {
public:
    vector<vector<string>> res;
    vector<string> target;
    vector<vector<string>> solveNQueens(int n) {
        target = vector<string>(n, string(n, '.'));
        rb(n, 0);
        return res;
    }
    void rb(int n, int row) {
        if (n == row) {
            res.push_back(target);
            return;
        }
        for (int i = 0; i < n; i++) {
            if (!isValid(i, row, n)) {
                continue;
            }
            target[i][row] = 'Q';
            rb(n, row + 1);
            target[i][row] = '.';
        }
    }
    bool isValid(int x, int y, int n) {
        for (int i = 0; i < y; i++) {
            if (target[x][i] == 'Q')
                return false;
        }
        for (int i = x - 1, j = y - 1; i >= 0 && j >= 0; i--, j--) {
            if (target[i][j] == 'Q')
                return false;
        }
        for (int i = x + 1, j = y - 1; i <n && j >= 0; i++, j--) {
            if (target[i][j] == 'Q')
                return false;
        }
        return true;
    }
};

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号