LeetCode N-Queens

来源:互联网 发布:魔力宝贝新手卡淘宝 编辑:程序博客网 时间:2024/05/16 04:50

N-Queens

 Total Accepted: 5516 Total Submissions: 21906

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.."]]


回溯+开数组记录之前选择

>.<这里不知道n的范围数组真的不好搞,无奈只有new一个了。

注意关于C++new对内存初始化的情况,http://hi.baidu.com/maxy218/item/8cd098256327c1829d63d1ca

实际测试下来,加不加(),运行结果都是正确的,也就是说都初始化为0了,但是初始化是个好习惯!

然后由于返回值是字符串,于是对string构造函数又长了见识


string (size_t n, char c);

(6) fill constructor

Fills the string with n consecutive copies of character c.



class Solution {    int *rec;    bool *row, *l, *r;public:    vector<vector<string> > solveNQueens(int n) {        vector<vector<string> > ans;        rec = new int[n]();        row = new bool[n]();        l = new bool[2 * n]();        r = new bool[2 * n]();        dfs(0, n, ans);        delete(rec);        delete(row);        delete(l);        delete(r);        return ans;    }    void dfs(int s, int n, vector<vector<string> >& ans) {        if (s == n) {            vector<string> vec;            for (int i = 0; i < n; i++) {                string str(n, '.');                str[rec[i]] = 'Q';                vec.push_back(str);            }            ans.push_back(vec);            return;        }        for (int i = 0; i < n; i++) {            if (!row[i] && !l[s + i] && !r[s - i + n - 1]) {                rec[s] = i;                row[i] = true;                l[s + i] = true;                r[s - i + n - 1] = true;                dfs(s + 1, n, ans);                row[i] = false;                l[s + i] = false;                r[s - i + n - 1] = false;            }        }    }};







0 0
原创粉丝点击