#include<stdio.h> #include<stdlib.h> int p=-1,visited[576][2],a,b,c,d,e,f,g,h; int KnightL(int ,int ,int ,int ,int ); int main() { int n,case1[576],i,j,co=-1,x,y; //clrscr(); scanf("%d",&n); for(i=1;i<n;i++) { for(j=1;j<n;j++) { for(y=0;y<576;y++) { visited[y][0]=NULL; visited[y][1]=NULL; } co++; x=0,y=0,p=-1,a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0; case1[co]=KnightL(i,j,n,x,y); } //printf("\n"); } co=-1; for(i=1;i<n;i++) { for(j=1;j<n;j++) { co++; printf("%d ",case1[co]); } printf("\n"); } } //knight moves again int KnightL(int i,int j,int n,int x,int y) { int l,mi=0; //printf("(%d,%d)\t",x,y); if(x==n-1&&y==n-1) return(0); else if(x>=0&&x<n&&y>=0&&y<n) { for(l=0;l<=p;l++) { if(visited[l][0]==x&&visited[l][1]==y) return -1; } p++; visited[p][0]=x; visited[p][1]=y; //printf("(%d,%d)\n",visited[p][0],visited[p][1]); //eight possibilities a=KnightL(i,j,n,x+i,y+j); if(a>-1) a=a+1; //printf(" %d ",a); b=KnightL(i,j,n,x-i,y-j); if(b>-1) b=b+1; //printf(" %d ",b); c=KnightL(i,j,n,x+i,y-j); if(c>-1) c=c+1; //printf(" %d ",c); d=KnightL(i,j,n,x-i,y+j); if(d>-1) d=d+1; //printf(" %d ",d); e=KnightL(i,j,n,x+j,y+i); if(e>-1) e=e+1; //printf(" %d ",e); f=KnightL(i,j,n,x-j,y-i); if(f>-1) f=f+1; //printf(" %d ",f); g=KnightL(i,j,n,x+j,y-i); if(g>-1) g=g+1; //printf(" %d ",g); h=KnightL(i,j,n,x-j,y+i); if(h>-1) h=h+1; //printf(" %d ",h); mi=a; if(b>=mi) mi=b; if(c>=mi) mi=c; if(d>=mi) mi=d; if(e>=mi) mi=e; if(f>=mi) mi=f; if(g>=mi) mi=g; if(h>=mi) mi=h; //printf("\t%d",mi); return(mi); } else { return -1; } }