Sei sulla pagina 1di 3

/*EIGHT QUEEN PROBLEM*/

#include <stdio.h>
#include<conio.h>
#define n 8
#define queen 2
int column;
int getposition(int board[n][n],int row,int flag)
{
int i,j;
if(flag==1)
{
column=0;
while(board[row][column]!=queen)
column++;
board[row][column]=0;
flag=0;
return 0;
}
if(flag==0)board[row][column]=queen;
NR: //increment row
row++;
if(row==n&&flag==0)goto prnt;
if(flag==0)column=-1;
NC: //increment column
column++;
if(column==n)
{
row--;
if(row<0)return 0;
flag=1;
getposition(board,row,flag); //backtracking
using recursion
}
if(flag==1)
{
flag=0;
goto NC;
}
// vertical Test
for(i = 0; i < row; i++)
if(board[i][column] == queen) goto NC;
// Up Diagonal Test
for(i = 1; (column-i) >= 0 && (row-i) >= 0; i++)
if(board[row-i][column-i] == queen) goto NC;
// Down Diagonal Test
for(i = 1; (column+i) <= n-1 && (row-i) >= 0; i++)
if(board[row-i][column+i] == queen) goto NC;

put:board[row][column] = queen;
goto NR;
prnt:
for(i = 0; i <n; i++)
{
for( j = 0; j <n; j++)
printf("%d ", board[i][j]);
printf("\n\n");
}
return 0;
}

main()
{
int b[n][n];
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
b[i][j]=0;
}
getposition(b,0,0);
getch();
return 0;
}

Potrebbero piacerti anche