代码随想录: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;
    }
};
posted @ 2025-01-27 17:33  huigugu  阅读(12)  评论(0)    收藏  举报