Go to diff to previous submission
#include <cstdio> //~ #include <math.h> int pole[102][102]; int velX,velY,startX,startY,cilX,cilY; int max (int a, int b){ return (a>b)?a:b; } int abs (int a){ return (a<0)? -a : a; } int vzdalenost(int X,int Y) { X=abs(cilX-X); Y=abs(cilY-Y); return max(X,Y); } void rekurze(int X,int Y,int N) { //~ printf ("---- %d %d\n",X,Y); if (X<1||Y<1||X>velX||Y>velY) return; if (pole[X][Y]==-1 || pole[X][Y]>N) pole[X][Y]=N; else return; if (vzdalenost(X,Y)>2) { if (cilX>X) { rekurze(X+2,Y-1,N+1); rekurze(X+2,Y+1,N+1); } else { rekurze(X-2,Y-1,N+1); rekurze(X-2,Y+1,N+1); } if (cilY>Y) { rekurze(X-1,Y+2,N+1); rekurze(X+1,Y+2,N+1); } else { rekurze(X-1,Y-2,N+1); rekurze(X+1,Y-2,N+1); } } else { rekurze(X+2,Y-1,N+1); rekurze(X+2,Y+1,N+1); rekurze(X-2,Y-1,N+1); rekurze(X-2,Y+1,N+1); rekurze(X+1,Y+2,N+1); rekurze(X-1,Y+2,N+1); rekurze(X+1,Y-2,N+1); rekurze(X-1,Y-2,N+1); } } int main() { //~ int velX,velY,startX,startY,cilX,cilY; while (scanf("%d%d%d%d%d%d",&velX,&velY,&startX,&startY,&cilX,&cilY)==6) { for (int i=1;i<=velX;i++) for (int j=1;j<=velY;j++) pole[i][j]=-1; rekurze(startX,startY,0); if (pole[cilX][cilY]==-1) printf("impossible\n"); else printf("%d\n",pole[cilX][cilY]); } }