Skip to content

Commit 86ac54b

Browse files
Merge pull request matthewsamuel95#649 from anishbadhri/patch-2
NQueens in CPP
2 parents 6442ae2 + e259ae7 commit 86ac54b

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

BackTracking/NQueens/nqueens.cpp

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#include <iostream>
2+
#include <set>
3+
#include <vector>
4+
using namespace std;
5+
set<int> row_c,col_c,mai_c,opp_c;
6+
void printBoard(vector<vector<int> > board){
7+
static int k = 1;
8+
cout<<"Board "<<k++<<":\n";
9+
for(int i=0;i<board.size();i++){
10+
for(int j=0;j<board[i].size();j++){
11+
cout<<board[i][j]<<" ";
12+
}
13+
cout<<endl;
14+
}
15+
cout<<endl;
16+
}
17+
bool isSafe(int row,int col){
18+
if(row_c.find(row)!=row_c.end())
19+
return false;
20+
if(col_c.find(col)!=col_c.end())
21+
return false;
22+
if(mai_c.find(row-col)!=mai_c.end())
23+
return false;
24+
if(opp_c.find(row+col)!=opp_c.end())
25+
return false;
26+
return true;
27+
}
28+
void setBoard(vector<vector<int> >&board, int row,int col){
29+
board[row][col] = 1;
30+
row_c.insert(row);
31+
col_c.insert(col);
32+
mai_c.insert(row-col);
33+
opp_c.insert(row+col);
34+
}
35+
void unsetBoard(vector<vector<int> >&board, int row,int col){
36+
board[row][col] = 0;
37+
row_c.erase(row);
38+
col_c.erase(col);
39+
mai_c.erase(row-col);
40+
opp_c.erase(row+col);
41+
}
42+
void solveBoard(vector<vector<int> > &board,int row){
43+
if(row==board.size()){
44+
printBoard(board);
45+
return;
46+
}
47+
for(int i=0;i<board.size();i++){
48+
if(isSafe(row,i)){
49+
setBoard(board,row,i);
50+
solveBoard(board,row+1);
51+
unsetBoard(board,row,i);
52+
}
53+
}
54+
}
55+
int main(){
56+
cout<<"Enter size of board: ";
57+
int n; cin>>n;
58+
vector<vector<int> > board = vector<vector<int> >(n,std::vector<int> (n,0));
59+
solveBoard(board,0);
60+
}

0 commit comments

Comments
 (0)