Skip to content

Commit 75ff789

Browse files
committed
Added NQueen Backtracking Algo in CPP
1 parent 37d470d commit 75ff789

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

problems/NQueen.cpp

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#include<bits/stdc++.h>
2+
using namespace std;
3+
4+
bool check(long int a, long int b, vector<pair<long int, long int> >vp)
5+
{
6+
//cout<<"inside check"<<endl;
7+
//cout<<"size of vp "<<vp.size()<<endl;
8+
long int size = vp.size();
9+
for(long int i=0;i<=size-1;i++)
10+
{
11+
//cout<<"inside loop"<<endl;
12+
if(vp[i].first == a || vp[i].second == b)
13+
return false;
14+
15+
if(abs(a-vp[i].first) == abs(b-vp[i].second))
16+
return false;
17+
}
18+
return true;
19+
}
20+
21+
bool recur_fill(long int a, long int b, vector<pair<long int, long int> >&vp, long int n)
22+
{
23+
if(b == n && a < n)
24+
return false;
25+
if(a == n)
26+
return true;
27+
bool result = check(a, b, vp);
28+
if(result == true)
29+
{
30+
vp.push_back(make_pair(a, b));
31+
bool val = recur_fill(a+1, 0, vp, n);
32+
if(val == false)
33+
{
34+
pair<long int, long int>tmp = vp.back();
35+
vp.pop_back();
36+
return recur_fill(tmp.first, tmp.second+1, vp, n);
37+
}
38+
}
39+
else
40+
{
41+
return recur_fill(a, b+1, vp, n);
42+
}
43+
44+
return true;
45+
}
46+
47+
int main()
48+
{
49+
vector<pair<long int, long int> >vp;
50+
vp.clear();
51+
long int n;
52+
cin>>n;
53+
recur_fill(0, 0, vp, n);
54+
for(long int i=0;i<=vp.size()-1;i++)
55+
{
56+
long int c = vp[i].second;
57+
for(long int j=0;j<c;j++)
58+
{
59+
cout<<" * ";
60+
}
61+
cout<<" Q ";
62+
for(long int j=c+1;j<n;j++)
63+
{
64+
cout<<" * ";
65+
}
66+
cout<<endl;
67+
}
68+
}

0 commit comments

Comments
 (0)