I have written a program for the 8-Queens problem.It prints all possible solutions.
queens() finds all the possible solutions. ok() tells whether the given column and row is safe or not.
The very strange problem is:
'Count' won't increment. I have no idea why.
#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
int arr[8][8]={0};
int count=0;
int ok(int k,int j)
{
int i,l;
int tup[8]={0};
for(i=0;i<k;i++)
{
for(l=0;l<8;l++)
{
if(arr[i][l]==1)
tup[i]=l;
}
}
for(i=0;i<k;i++)
{
if((abs(tup[i]-j)==abs(i-k))||(tup[i]==j)||(arr[i][j]==1))
return 0;
}
return 1;
}
void queen(int i)
{
int j,k,temp;
if(i==8)
{
count++;
cout<<"Solution no. "<<count<<":\n";
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(arr[i][j]==1)
cout<<char(81);
else
cout<<"=";
cout<<" ";
}
cout<<"\n";
}
cout<<"---------------\n";
getch();
}
for(j=0;j<8;j++)
{
if(ok(i,j))
{
for(k=0;k<8;k++)
arr[i][k]=0;
arr[i][j]=1;
queen(i+1);
}
}
arr[i][j]=0;
}
int main()
{
int i,j;
clrscr();
queen(0);
return 0;
}