52. N-Queens II

N-皇后问题(n*n棋盘上,放n个皇后,要求每一行,每一列,每一斜线都不能同时出现两个皇后)。统计一共有多少种方法。

解决:Backtracking.

添加pos变量:用来记录前几行皇后的位置

class Solution {
private:
    int cnt;
public:
    void helper(vector<int> &pos, int row, int n) {
        if (row==n)
            ++cnt;
        else {
            for (int i=0; i<n; ++i) {
                bool flag = true;
                for (int j=0; j<row && flag; ++j) {
                    if (abs(i-pos[j]) == row-j || pos[j]==i)
                        flag = false;
                }
                if (flag) {
                    pos[row] = i;
                    helper(pos, row+1, n);
                    pos[row] = -1;
                }
            }
        }
    }
    int totalNQueens(int n) {
        cnt = 0;
        vector<int> pos(n, -1);
        helper(pos, 0, n);
        return cnt;
    }
};

 

posted @ 2017-12-14 15:25  Zzz...y  阅读(170)  评论(0编辑  收藏  举报