Code:
#include<stdio.h>
#include<stdlib.h>
int **B;
int pinfun(int i,int x,int y ,int n,int **B);
int main (void){
int m,j,k;
scanf("%d",&m);
B=malloc((m+200) * sizeof(int *));
for(j=0;j<m;j++){
B[j]=malloc(m*sizeof(int));
}
for(j=0;j<m;j++){
for(k=0;k<m;k++){
*(*(B+j)+k)=0;
}
}
pinfun(1,0,0,m,B);
for(j=0;j<m;j++){
for(k=0;k<m;k++){
printf("%d ",B[j][k]);
}
printf("\n\n");
}
getchar();
getchar();
}
int pinfun(int i,int x,int y,int n,int **B){
if(i<=n*n){
if((pinfun(i+1,x+3,y,n,B)==1)&&(y>=0)&&(y<=n)&&(x>=0)&&(x<=n)&&((B[x][y])==0)){
B[x][y]=i;
return 1;
}
if((pinfun(i+1,x-3,y,n,B)==1)&&(y>=0)&&(y<=n)&&(x<=n)&&(x>=0)&&(B[x][y]==0)){
B[x][y]=i;
return 1;
}
if((pinfun(i+1,x,y+3,n,B)==1)&&(y>=0)&&(y<=n)&&(x<=n)&&(x>=0)&&(B[x][y]==0)){
B[x][y]=i;printf("%d\n",i);
return 1;
}
if((pinfun(i+1,x,y-3,n,B)==1)&&(y>=0)&&(y<=n)&&(x<=n)&&(x>=0)&&(B[x][y]==0)){
B[x][y]=i;
return 1;
}
if((pinfun(i+1,x-2,y-2,n,B)==1)&&(y>=0)&&(y<=n)&&(x<=n)&&(x>=0)&&(B[x][y]==0)){
B[x][y]=i;
return 1;
}
if((pinfun(i+1,x+2,y+2,n,B)==1)&&(y>=0)&&(y<=n)&&(x<=n)&&(x>=0)&&(B[x][y]==0)){
B[x][y]=i;
return 1;
}
if((pinfun(i+1,x+2,y-2,n,B)==1)&&(y>=0)&&(y<=n)&&(x<=n)&&(x>=0)&&(B[x][y]==0)){
B[x][y]=i;
return 1;
}
if((pinfun(i+1,x-2,y+2,n,B)==1)&&(y>=0)&&(y<=n)&&(x<=n)&&(x>=0)&&(B[x][y]==0)){
B[x][y]=i;
return 1;
}
if((y<0)||(y>n)||(x>n)||(x<0)||B[x][y]!=0){
return 0;
}
}
else{
B[x][y]=i;
return 1;
}
}
For example if given number is 5