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); } int best; 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 (X == cilX && Y == cilY) {if (best==-1 || best > N) best = N;} 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); } } int main() { //~ int velX,velY,startX,startY,cilX,cilY; while (scanf("%d%d%d%d%d%d",&velX,&velY,&startX,&startY,&cilX,&cilY)==6) { int best = -1; rekurze(startX,startY,0); if (best==-1) printf("impossible\n"); else printf("%d\n",best); } }
--- c4.s1373.cteam039.grasshop.cpp.0.grasshop.cpp +++ c4.s1395.cteam039.grasshop.cpp.0.grasshop.cpp @@ -16,35 +16,18 @@ } -void rekurze(int X,int Y,int N) +int best; + +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)>5) - { - 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 + + + + + + if (X == cilX && Y == cilY) {if (best==-1 || best > N) best = N;} + 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); @@ -53,10 +36,7 @@ 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); - } + + } + } @@ -67,11 +47,9 @@ 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; - + int best = -1; + rekurze(startX,startY,0); - if (pole[cilX][cilY]==-1) printf("impossible\n"); - else printf("%d\n",pole[cilX][cilY]); + if (best==-1) printf("impossible\n"); + else printf("%d\n",best); }