leetcode---N-Queens---回溯

来源:互联网 发布:剑雨逍遥坐骑进阶数据 编辑:程序博客网 时间:2024/06/05 20:29

The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.

这里写图片描述
Given an integer n, return all distinct solutions to the n-queens puzzle.

Each solution contains a distinct board configuration of the n-queens’ placement, where ‘Q’ and ‘.’ both indicate a queen and an empty space respectively.

For example,
There exist two distinct solutions to the 4-queens puzzle:

[
[“.Q..”, // Solution 1
“…Q”,
“Q…”,
“..Q.”],

[“..Q.”, // Solution 2
“Q…”,
“…Q”,
“.Q..”]
]

class Solution {public:    vector<vector<string>> ans;    bool ok(int depth, int col, int n, vector<string> &tmp)    {        int sum = col + depth;        int c = 0;        for(int i=0; i<depth; i++)         {            c = depth - i;            if(tmp[i][col] == 'Q' || tmp[i][sum-i] == 'Q' || tmp[i][col-c] == 'Q')                return false;        }        return true;    }    void dfs(int depth, vector<string> &tmp, int n)    {        if(depth >= n)        {            ans.push_back(tmp);            return;        }        for(int j=0; j<n; j++)        {            tmp[depth][j] = 'Q';            if(ok(depth, j, n, tmp))                dfs(depth+1, tmp, n);            tmp[depth][j] = '.';        }    }    vector<vector<string>> solveNQueens(int n)     {        vector<string> tmp;        for(int i=0; i<n; i++)        {            string s = "";            for(int j=0; j<n; j++)                s += '.';            tmp.push_back(s);        }        dfs(0, tmp, n);        return ans;    }};
0 0