51. N-Queens

來源:互聯網
上載者:User

標籤:nbsp   ace   hat   put   back   boa   contain   .com   分享圖片   

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.

Example:

Input: 4Output: [ [".Q..",  // Solution 1  "...Q",  "Q...",  "..Q."], ["..Q.",  // Solution 2  "Q...",  "...Q",  ".Q.."]]Explanation: There exist two distinct solutions to the 4-queens puzzle as shown above.
 AC code:
class Solution {public:    vector<vector<string>> solveNQueens(int n) {        int res = 0;        vector<vector<string>> v;        vector<string> nqueens(n, string(n, ‘.‘));        solve(v, nqueens, n, 0);        return v;    }        void solve(vector<vector<string>>& v, vector<string>& nqueens, int n, int row) {        if (row == n) {            v.push_back(nqueens);            return;        }        for (int col = 0; col < n; ++col) {            if (judge(nqueens, n, row, col)) {                nqueens[row][col] = ‘Q‘;                solve(v, nqueens, n, row+1);                nqueens[row][col] = ‘.‘;            }        }    }    bool judge(vector<string> nqueens, int n, int x, int y) {        // up and down        for (int i = 0; i < n && i != x; ++i) {            if (nqueens[i][y] == ‘Q‘) return false;        }        // right and left        for (int i = 0; i < n && i != y; ++i) {            if (nqueens[x][i] == ‘Q‘) return false;        }        // left up        for (int i = x-1, j = y-1; i >= 0 && j >= 0; --i, --j) {            if (nqueens[i][j] == ‘Q‘) return false;        }        // right up        for (int i = x-1, j = y+1; i >= 0 && j < n; --i, ++j) {            if (nqueens[i][j] == ‘Q‘) return false;        }        return true;    }};

Runtime: 32 ms, faster than 8.09% of C++ online submissions for N-Queens.

 

51. N-Queens

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.