1
+ class Solution {
2
+ public:
3
+ vector<vector<string>> solveNQueens (int n) {
4
+ // Start typing your C/C++ solution below
5
+ // DO NOT write int main() function
6
+
7
+ string row (n, ' .' );
8
+ vector<string> queens (n, row);
9
+
10
+ vector<bool > visited_row (n, false );
11
+ vector<bool > visited_slope1 (2 *n, false );
12
+ vector<bool > visited_slope2 (2 *n, false );
13
+ vector<vector<bool >> visited;
14
+ visited.push_back (visited_row);
15
+ visited.push_back (visited_slope1);
16
+ visited.push_back (visited_slope2);
17
+
18
+ vector<vector<string>> result;
19
+
20
+ generateNQueens (queens, visited, 0 , n, result);
21
+ return result;
22
+ }
23
+
24
+ void generateNQueens (vector<string>& queens, vector<vector<bool >>& visited,
25
+ int row, int n, vector<vector<string>>& result) {
26
+
27
+ if (row == n) {
28
+ result.push_back (queens);
29
+ return ;
30
+ }
31
+
32
+ for (int col = 0 ; col < n; col++) {
33
+ if (visited[0 ][col] == false &&
34
+ visited[1 ][row+col] == false &&
35
+ visited[2 ][n-col+row] == false ) {
36
+
37
+ queens[row][col] = ' Q' ;
38
+ visited[0 ][col] = true ;
39
+ visited[1 ][row+col] = true ;
40
+ visited[2 ][n-col+row] = true ;
41
+
42
+ generateNQueens (queens, visited, row + 1 , n, result);
43
+
44
+ queens[row][col] = ' .' ;
45
+ visited[0 ][col] = false ;
46
+ visited[1 ][row+col] = false ;
47
+ visited[2 ][n-col+row] = false ;
48
+ }
49
+ }
50
+ }
51
+ };
0 commit comments