mirror of
https://hub.njuu.cf/TheAlgorithms/C-Plus-Plus.git
synced 2023-10-11 13:05:55 +08:00
Create nQueens.cpp
n queens problem with steps
This commit is contained in:
parent
6376bf46af
commit
20f2c97aad
124
backtracking/nQueens.cpp
Normal file
124
backtracking/nQueens.cpp
Normal file
@ -0,0 +1,124 @@
|
||||
#include<iostream>
|
||||
using namespace std;
|
||||
|
||||
bool isSafe(int arr[][4],int x,int y,int n){
|
||||
|
||||
// in column
|
||||
for(int i=0;i<n;i++){
|
||||
if(arr[i][y]==1){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// in row
|
||||
for(int j=0;j<n;j++){
|
||||
if(arr[x][j]==1){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
int row = x;
|
||||
int col = y;
|
||||
|
||||
//left diagonal
|
||||
while(row>=0 && col>=0){
|
||||
if(arr[row][col]==1){
|
||||
return false;
|
||||
}
|
||||
row--;
|
||||
col--;
|
||||
}
|
||||
|
||||
row = x;
|
||||
col = y;
|
||||
|
||||
|
||||
// right diagonal
|
||||
while(row>=0 && col<n){
|
||||
if(arr[row][col]==1){
|
||||
return false;
|
||||
}
|
||||
row--;
|
||||
col++;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void printMatrix(int arr[][4],int n){
|
||||
for(int i=0;i<n;i++){
|
||||
for(int j=0;j<n;j++){
|
||||
if(arr[i][j] == 0)
|
||||
cout<<"_"<<" ";
|
||||
else
|
||||
cout<<"Q"<<" ";
|
||||
}
|
||||
cout<<endl;
|
||||
}
|
||||
cout<<endl;
|
||||
}
|
||||
|
||||
// row = starting row
|
||||
bool nQueen(int arr[][4],int n,int row){
|
||||
|
||||
// base case = if row > n ==> done
|
||||
if(row>=n){
|
||||
return true;
|
||||
}
|
||||
|
||||
// columns - elements in a particular row
|
||||
for(int j=0;j<n;j++){
|
||||
for(int k=0;k<n;k++){
|
||||
arr[row][k]=0;
|
||||
}
|
||||
if(isSafe(arr,row,j,n)){
|
||||
arr[row][j]=1;
|
||||
|
||||
printMatrix(arr,n);
|
||||
|
||||
if(nQueen(arr,n,row+1)){
|
||||
return true;
|
||||
}
|
||||
|
||||
arr[n][j]=0; // backtracking
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int main(){
|
||||
|
||||
int n = 4;
|
||||
|
||||
int arr[4][4];
|
||||
|
||||
// initializing all to 0
|
||||
for(int i=0;i<n;i++){
|
||||
for(int j=0;j<n;j++){
|
||||
arr[i][j]=0;
|
||||
}
|
||||
}
|
||||
cout<<"\nSTEPS : \n";
|
||||
printMatrix(arr,n);
|
||||
|
||||
for(int i=0;i<n;i++){
|
||||
// giving starting row i
|
||||
bool ans = nQueen(arr,n,i);
|
||||
|
||||
if(ans){
|
||||
cout<<"\nSolution : \n\n";
|
||||
printMatrix(arr,n);
|
||||
break;
|
||||
}
|
||||
else{
|
||||
cout<<"Solution doesn't exist\n";
|
||||
printMatrix(arr,n);
|
||||
cout<<endl<<endl;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user