标签:position [] 代码 log let com boa oar abs
代码:
class Solution {
public:
    /**
     * Get all distinct N-Queen solutions
     * @param n: The number of queens
     * @return: All distinct solutions
     * For example, A string ‘...Q‘ shows a queen on forth position
     */
    vector<vector<string> > solveNQueens(int n) {
        // write your code here
        if(n == 1) {
            vector<vector<string> > result;
            vector<string> strOneRow;
            strOneRow.push_back("Q");
            result.push_back(strOneRow);
            return result;
        }
        else if(n < 4) {
            return vector<vector<string> > ();
        }
        vector<vector<string> > result;
        int i;
        int *pCheckerboard = new int[n];
        for(i=0; i<n; i++) {
            pCheckerboard[i] = -1;
        }
queensRecursively(0, n, pCheckerboard, result);
        delete[] pCheckerboard;
        return result;
    }
    void queensRecursively(int row, int n, int *pCheckerboard, vector<vector<string> > &result) {
        int i = 0, j = 0;
        if(n == row) {
            vector<string> strOneRow;
            for(i=0; i<n; i++) {
                string str;
                for(j=0; j<n; j++) {
                    str += ‘.‘;
                }
                if(pCheckerboard[i]>=0 && pCheckerboard[i]<n) {
                    str[pCheckerboard[i]] = ‘Q‘;
                }
                strOneRow.push_back(str);
            }
            result.push_back(strOneRow);
        }
        else {
            for(i=0; i<n; i++) {
                if(canPlace(row, i, n, pCheckerboard)) {
                    pCheckerboard[row] = i;
                    queensRecursively(row+1, n, pCheckerboard, result);
                }
            }
        }
    }
    int canPlace(int row, int col, int n, int *pCheckerboard) {
        int i;
        for(i=0; i<n && i!=row; i++) {
            if(pCheckerboard[i] == col) {
                return 0;
            }
            if(abs(row-i) == abs(col-pCheckerboard[i])) {
                return 0;
            }
        }
        return 1;
    }
}; 
截图:

标签:position [] 代码 log let com boa oar abs
原文地址:http://www.cnblogs.com/w1500802028/p/7296520.html