Skip to content

Commit 742ef04

Browse files
authored
Create main.cpp
1 parent 9ffbcfb commit 742ef04

File tree

1 file changed

+50
-0
lines changed
  • 20 - Hashmap Data Structure Problems/03 - N - Queens

1 file changed

+50
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
class Solution {
2+
public:
3+
4+
void addSolution(vector<vector<string>>& ans, vector<int>& board, int n){
5+
vector<string> temp;
6+
7+
for(int i = 0; i < n; i++){
8+
string row(n, '.');
9+
row[board[i]] = 'Q';
10+
temp.push_back(row);
11+
}
12+
ans.push_back(temp);
13+
}
14+
15+
void solve(int col, vector<vector<string>>& ans, vector<int>& board, unordered_set<int>& rows, unordered_set<int>& primaryDiag, unordered_set<int>& secondaryDiag, int n){
16+
if(col == n){
17+
addSolution(ans, board, n);
18+
return;
19+
}
20+
21+
for(int row = 0; row < n; row++){
22+
int diag1 = row - col;
23+
int diag2 = row + col;
24+
25+
if(rows.find(row) == rows.end() && primaryDiag.find(diag1) == primaryDiag.end() && secondaryDiag.find(diag2) == secondaryDiag.end()){
26+
board[col] = row;
27+
rows.insert(row);
28+
primaryDiag.insert(diag1);
29+
secondaryDiag.insert(diag2);
30+
31+
solve(col + 1, ans, board, rows, primaryDiag, secondaryDiag, n);
32+
33+
board[col] = -1;
34+
rows.erase(row);
35+
primaryDiag.erase(diag1);
36+
secondaryDiag.erase(diag2);
37+
}
38+
}
39+
}
40+
vector<vector<string>> solveNQueens(int n) {
41+
vector<int> board(n, -1);
42+
vector<vector<string>> ans;
43+
unordered_set<int> rows;
44+
unordered_set<int> primaryDaig;
45+
unordered_set<int> secondaryDaig;
46+
47+
solve(0, ans, board, rows, primaryDaig, secondaryDaig, n);
48+
return ans;
49+
}
50+
};

0 commit comments

Comments
 (0)