[Leetcode] N-Queens

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.."]
]

 回溯法,DFS,没啥好说的。

 1 class Solution {
 2 public:
 3     bool isValid(vector<string> &board, int x, int y) {
 4         for (int i = 0; i < x; ++i) {
 5             if (board[i][y] == 'Q') return false;
 6         }
 7         for (int i = 0; i < board.size(); ++i) {
 8             for (int j = 0; j < board.size(); ++j) {
 9                 if (i != x && j != y && i-j == x-y && board[i][j] == 'Q')
10                     return false;
11                 if (i != x && j != y && i+j == x+y && board[i][j] == 'Q')
12                     return false;
13             }
14         }
15         return true;
16     }
17     
18     void solveHelper(vector<vector<string> > &res, vector<string> &board, int idx) {
19         if (idx == board.size()) {
20             res.push_back(board);
21             return;
22         }
23         for (int i = 0; i < board.size(); ++i) {
24             board[idx][i] = 'Q';
25             if (isValid(board, idx, i)) {
26                 solveHelper(res, board, idx + 1);
27             }
28             board[idx][i] = '.';
29         }
30     }
31     
32     vector<vector<string> > solveNQueens(int n) {
33         vector<vector<string> > res;
34         vector<string> board;
35         string row;
36         for (int i = 0; i < n; ++i) {
37             row.push_back('.');
38         }
39         for (int i = 0; i < n; ++i) {
40             board.push_back(row);
41         }
42         solveHelper(res, board, 0);
43         return res;
44     }
45 };

 

 

posted @ 2014-04-17 18:56  Eason Liu  阅读(409)  评论(0编辑  收藏  举报