/*
****************************************
Problem: N Queen Problem
****************************************
Ashis Kumar Chanda
ID: 1624
CSE, DU
****************************************
****************************************
*/
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include <iostream>
using namespace std;
int n=8; // number of chessboard n*n
int x[9]={0}; // take ans of each row
void Nqueen(int k);
bool Can_Place(int a, int k);
void Print_ans();
int main()
{
Nqueen(1); // Let, chess board start from (1,1) not (0,0)
Print_ans();
return 0;
}
void Nqueen(int k)
{
int i,j;
for(j=1; j<= n; j++){
if( Can_Place(j,k) ){
x[k]= j;
if( k== n)
break;
Nqueen( ++k);//increment coloumn
}
}
}// end of NQueen
bool Can_Place(int a, int k)
{
int j;
for(j=1; j<=(k-1) ; j++){
if( x[j]== a)
return false;// two in same row
}
if(j!=1 )
j--;
if( abs(x[j]-a) == abs( j-k ) )
return false; // two in same diagonal
return true;// no need to check two in same coloumn
}
void Print_ans()
{
puts("Answer is given below:");
for( int i=1; i<=n; i++)
printf(" row %d => coloumn %d\n", x[i], i);
}