You are on page 1of 2

#include <stdio.

h>
#include <conio.h>
#include <stdlib.h>
int x_move[9]={-1, -2, -2, -1, 1, 2, 2, 1};
int y_move[9]={-2, -1, 1, 2, 2, 1, -1, -2};

void initializare(int v[][10],int n)


{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
v[i][j]=0;
}

int safe(int x, int y, int v[][10],int n)


{
return (x>=0 && x<n && y>=0 && y<n && v[x][y]==0);
}

int verifica(int v[][10],int n)


{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(v[i][j]==0)
return 0;
return 1;
}

void afisare(int v[][10],int n)


{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
printf("%d ",v[i][j]);
printf("\n");
}
}

void backtraking(int v[][10],int n,int i,int j,int moves)


{
int k,x,y;
for(k=0;k<8;k++)
{
x=i+x_move[k];
y=j+y_move[k];
if(safe(x,y,v,n)==1)
{
v[x][y]=moves;
backtraking(v,n,x,y,moves+1);
}

if(verifica(v,n)==0)
v[i][j]=0;
else
{
afisare(v,n);
printf("\n");
v[i][j]=0;
getch();
}
}
}

int main()
{
int n,i,j;
printf("n=");
scanf("%d",&n);
int v[10][10];
initializare(v,n);
v[1][1]=1;
backtraking(v,n,1,1,2);
afisare(v,n);
return 0;
}

You might also like