NQueen Problem in C
#include<stdio.h>
#include<math.h>
#define TRUE 1
#define FALSE 0
#define MAXBOARDSIZE 8
int board[MAXBOARDSIZE];
int n;
int steps;
static int solno=1;
void PrintBoard()
{
int i, k,z;
printf("\nSolution %d:\n", solno++);
printf("No of Steps=%d:\n", steps);
for (i = 0; i < n; i++)
{
for (k = 0; k < board[i]; k++)
printf("\t-");
printf("\tQ%d",i+1);
for(z=k;z<n-1;z++)
printf("\t-");
printf("\n");
}
}
int IsPlaceSafe(int row, int col)
{
int i;
for(i=0; i<row; i++)
{
if( (board[i] == col) || (abs(board[i]-col) == abs(i-row)) )
return FALSE;
}
return TRUE;
}
void NQueens(int row)
{
int col;
for(col=0; col<n; col++)
{
steps++;
if(IsPlaceSafe(row, col))
{
board[row] = col;
if(row == n-1)
PrintBoard();
else
NQueens(row+1);
}
}
}
int main()
{
int c=1;
while(c==1){
printf("Enter board size: ");
scanf("%d", &n);
if(n>MAXBOARDSIZE || n<4){
printf("\nNo Solution Exit\n");
}else{
NQueens(0);
}
printf("\nPress 1 to Continue and 0 to exit");
scanf("%d",&c);
solno=1;
steps=0;
}
return 0;
}
0 comments:
Post a Comment