LeetCode-N-Queens-N皇后-回溯

https://oj.leetcode.com/problems/n-queens/

回溯法的课本例题。注意有递归非递归两种实现。

class Solution {
public:
    int n,m;
    vector <int> c;
    vector <vector<string>> tot;
    bool Check(int p,int q){
        for (int i=0;i<p;i++){
            if (c[i]==q) return false;
            if (abs(p-i)==abs(q-c[i])) return false;
        }
        return true;
    }
    void Solve(int p){
        if (p==n) {
            vector <string> res(n,string(n,'.'));
            for (int i=0;i<n;i++){
                res[i][c[i]]='Q';
            }
            tot.push_back(res);
            return;
        }
        for (int i=0;i<n;i++){
            if (Check(p,i)){
                c[p]=i;
                Solve(p+1);
            }
        }
    }
    vector<vector<string> > solveNQueens(int n) {
        this->n=n;
        c.resize(n,-1);
        Solve(0);
        return tot;
    }
};

  

posted @ 2014-10-11 10:42  zombies  阅读(135)  评论(0编辑  收藏  举报