forked from TARANG0503/DSA-Practice
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNqueens.cpp
76 lines (61 loc) · 1.79 KB
/
Nqueens.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include<bits/stdc++.h>
using namespace std;
void NQueens(int n,vector<int> temp,vector<vector<int> >& queens,int j){
/* cout<<"temp: "<<endl;
for(int i=0;i<temp.size();i++){
cout<<temp[i]<<" ";
}
cout<<endl;
*/
if(temp.size()>1){
for(int i=0;i<temp.size()-1;i++){
if(abs(temp[temp.size()-1]-temp[i])==0 || abs(j-i-1)==abs(temp[temp.size()-1]-temp[i])){
return;
}
}
}
if(j==n){
queens.push_back(temp);
return;
}
for(int i=0;i<n;i++){
temp.push_back(i);
//cout<<"j="<<j<<endl;
NQueens(n,temp,queens,j+1);
temp.pop_back();
}
return;
}
vector<vector<string> > solveNQueens(int n) {
vector<vector<int> > queens;
vector<vector<string> > Nqueens;
vector<int> temp;
NQueens(n,temp,queens,0);
//cout<<"queens: "<<endl;
string s(n,'.');
vector<string> sq;
for(int i=0;i<queens.size();i++){
for(int j=0;j<queens[i].size();j++){
//cout<<queens[i][j]<<" ";
s[queens[i][j]]='Q';
sq.push_back(s);
s[queens[i][j]]='.';
}
Nqueens.push_back(sq);
sq.clear();
//cout<<endl;
}
return Nqueens;
}
int main(){
int n=4;
vector<vector<string> > result = solveNQueens(n);
for(int i=0;i<result.size();i++){
cout<<"[";
for(int j=0;j<result[0].size();j++){
cout<<result[i][j]<<",";
}
cout<<"]"<<endl;
}
return 0;
}