[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 };

 

 

你可能感兴趣的:(LeetCode)