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>velX) 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]); } }
--- c4.s1100.cteam039.grasshop.cpp.0.grasshop.cpp +++ c4.s1121.cteam039.grasshop.cpp.0.grasshop.cpp @@ -1,3 +1,4 @@ #include <cstdio> +//~ #include <math.h> int pole[102][102]; @@ -5,4 +6,13 @@ 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) @@ -12,24 +22,41 @@ if (pole[X][Y]==-1 || pole[X][Y]>N) pole[X][Y]=N; else return; - //~ 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); - //~ } + 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); + } }