【Leetcode】51. N-Queens(回溯)

来源:互联网 发布:网络电视 百度云 编辑:程序博客网 时间:2024/06/02 03:07

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 {private:    vector<vector<string>> key;public:    vector<vector<string>> solveNQueens(int n) {        vector<int> vi(n);        solveNQueens(vi,0,n);        return key;    }    bool isSuit(int curIndex, int val ,int n, vector<int> &a){        if(curIndex<n){            for(int i=0;i<curIndex;i++){                if(a[i]==val||(a[i]-val)==(i-curIndex)||(a[i]-val)==(curIndex-i)) return false;            }            return true;        }        else             return false;    }        void solveNQueens(vector<int> &vi,int c,int n) {        if(c==n){            vector<string> s(n,string(n,'.'));            for(int i=0;i<n;i++){                s[i][vi[i]]='Q';            }            key.push_back(s);            return;        }        for(vi[c] = 0; vi[c] < n; ++ vi[c])             if(isSuit(c,vi[c],n,vi))                 solveNQueens(vi,  c + 1,n);    }};


1 0
原创粉丝点击