Source code for submission s1395

Go to diff to previous submission

grasshop.cpp

  1. #include <cstdio>
  2. //~ #include <math.h>
  3.  
  4. int pole[102][102];
  5.  
  6. int velX,velY,startX,startY,cilX,cilY;
  7.  
  8. int max (int a, int b){ return (a>b)?a:b; }
  9. int abs (int a){ return (a<0)? -a : a; }
  10.  
  11. int vzdalenost(int X,int Y)
  12. {
  13. X=abs(cilX-X);
  14. Y=abs(cilY-Y);
  15. return max(X,Y);
  16. }
  17.  
  18. int best;
  19.  
  20. void rekurze(int X,int Y, int N)
  21. {
  22. //~ printf ("---- %d %d\n",X,Y);
  23. if (X<1||Y<1||X>velX||Y>velY) return;
  24.  
  25.  
  26.  
  27.  
  28.  
  29. if (X == cilX && Y == cilY) {if (best==-1 || best > N) best = N;}
  30. else
  31. {
  32. rekurze(X+2,Y-1,N+1);
  33. rekurze(X+2,Y+1,N+1);
  34.  
  35. rekurze(X-2,Y-1,N+1);
  36. rekurze(X-2,Y+1,N+1);
  37.  
  38.  
  39. }
  40.  
  41. }
  42.  
  43.  
  44. int main()
  45. {
  46. //~ int velX,velY,startX,startY,cilX,cilY;
  47. while (scanf("%d%d%d%d%d%d",&velX,&velY,&startX,&startY,&cilX,&cilY)==6)
  48. {
  49. int best = -1;
  50.  
  51. rekurze(startX,startY,0);
  52. if (best==-1) printf("impossible\n");
  53. else printf("%d\n",best);
  54. }
  55.  
  56. }
  57.  

Diff to submission s1373

grasshop.cpp

--- 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);
         }