【DFS+回溯】 51. N 皇后

class Solution {
public:
    void dfs(int index, vector<string> &cur_board){
        if (index == nn){
            result.push_back(cur_board);
        }
        else{
            int x, y = index;
            for(int i=0;i<nn;++i){
                x = i;
                if(!row_num[y] && !col_num[x] && !left_top[x - y + nn - 1] && !right_top[x + y]){
                    cur_board[x][y] = 'Q';
                    row_num[y] = 1;
                    col_num[x] = 1;
                    left_top[x - y + nn - 1] = 1;
                    right_top[x + y] = 1;
                    dfs(index + 1, cur_board);
                    row_num[y] = 0;
                    col_num[x] = 0;
                    left_top[x - y + nn - 1] = 0;
                    right_top[x + y] = 0;
                    cur_board[x][y] = '.';
                }
            }
        }
    }

    vector<vector<string>> solveNQueens(int n) {
        nn = n;
        row_num = vector<int>(n, 0);
        col_num = vector<int>(n, 0);
        left_top = vector<int>(2*n - 1, 0);
        right_top = vector<int>(2*n - 1, 0);
        vector<string> cur_board(n , string(n, '.'));
        dfs(0, cur_board);
        return result;
    }
private:
    int nn; 
    vector<int> row_num;
    vector<int> col_num;
    vector<int> left_top;
    vector<int> right_top;
    vector<vector<string>> result;
};
posted @ 2022-03-01 16:54  fwx  阅读(20)  评论(0)    收藏  举报