Skip to content

Commit cd1af2b

Browse files
authored
Merge branch 'main' into lcque
2 parents 0996b59 + 791eef2 commit cd1af2b

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

51.N-Queens.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
class Solution {
5+
public:
6+
void solve(int col, int n, vector<string> &board,
7+
vector<vector<string>> &ans,
8+
vector<int> &leftrow, vector<int> &upperdiag, vector<int> &lowerdiag) {
9+
10+
if (col == n) {
11+
ans.push_back(board);
12+
return;
13+
}
14+
15+
for (int row = 0; row < n; row++) {
16+
if (leftrow[row] == 0 && lowerdiag[row + col] == 0 && upperdiag[(n - 1) + (col - row)] == 0) {
17+
18+
board[row][col] = 'Q';
19+
leftrow[row] = 1;
20+
lowerdiag[row + col] = 1;
21+
upperdiag[(n - 1) + (col - row)] = 1;
22+
23+
solve(col + 1, n, board, ans, leftrow, upperdiag, lowerdiag);
24+
25+
board[row][col] = '.'; // backtrack
26+
leftrow[row] = 0;
27+
lowerdiag[row + col] = 0;
28+
upperdiag[(n - 1) + (col - row)] = 0;
29+
}
30+
}
31+
}
32+
33+
vector<vector<string>> solveNQueens(int n) {
34+
vector<vector<string>> ans;
35+
vector<string> board(n, string(n, '.'));
36+
37+
vector<int> leftrow(n, 0);
38+
vector<int> lowerdiag(2 * n - 1, 0);
39+
vector<int> upperdiag(2 * n - 1, 0);
40+
41+
solve(0, n, board, ans, leftrow, upperdiag, lowerdiag);
42+
return ans;
43+
}
44+
};

0 commit comments

Comments
 (0)