Source code for submission s859

Go to diff to previous submission

grassshop.cpp

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int pole[100][100];
  5. int posSx, posSy;
  6. int posFx, posFy;
  7. int sizex, sizey;
  8.  
  9. void check(int x, int y, int jump)
  10. {
  11. if(jump > sizex * 3/2 && jump > sizey * 3/2)
  12. return;
  13. if(x > -1 && y > -1 && x < sizex && y < sizey)
  14. {
  15. if(pole[x][y]>jump)
  16. {
  17. pole[x][y] = jump;
  18. if(abs(x-posFx) < 4 && abs(y-posFy) < 4 )
  19. {
  20. check(x+2, y+1,jump+1);
  21. check(x+2, y-1,jump+1);
  22. check(x-2, y+1,jump+1);
  23. check(x-2, y-1,jump+1);
  24. check(x+1, y+2,jump+1);
  25. check(x+1, y-2,jump+1);
  26. check(x-1, y+2,jump+1);
  27. check(x-1, y-2,jump+1);
  28. }
  29. else
  30. {
  31. if(x-posFx < 0)
  32. {
  33. if(y-posFy<0)
  34. if(abs(x-posFx) < abs(y-posFy))
  35. check(x+1, y+2,jump+1);
  36. else
  37. check(x+2, y+1,jump+1);
  38. else
  39.  
  40. if(abs(x-posFx) < abs(y-posFy))
  41. check(x+1, y-2,jump+1);
  42. else
  43. check(x+2, y-1,jump+1);
  44. }
  45. else
  46. {
  47. if(y-posFy<0)
  48. if(abs(x-posFx) < abs(y-posFy))
  49. check(x-1, y+2,jump+1);
  50. else
  51. check(x-2, y+1,jump+1);
  52. else
  53.  
  54. if(abs(x-posFx) < abs(y-posFy))
  55. check(x-1, y-2,jump+1);
  56. else
  57. check(x-2, y-1,jump+1);
  58. }
  59. }
  60. }
  61. }
  62.  
  63. }
  64.  
  65.  
  66. int main(void)
  67. {
  68.  
  69. while(scanf("%d %d %d %d %d %d", &sizex, &sizey, &posSx, &posSy, &posFx, &posFy) == 6)
  70. {
  71. for(int i = 0; i<sizex; i++)
  72. for(int j = 0; j<sizey; j++)
  73. pole[i][j] = 1000;
  74.  
  75. check(posSx-1, posSy-1, 0);
  76.  
  77.  
  78. /*for(int i = 0; i<sizex; i++)
  79. {
  80. for(int j = 0; j<sizey; j++)
  81. printf("%d", pole[i][j]);
  82. printf("\n");
  83. }*/
  84.  
  85.  
  86. if(pole[posFx-1][posFy-1]==1000)
  87. printf("impossible\n");
  88. else
  89. printf("%d\n", pole[posFx-1][posFy-1]);
  90. }
  91.  
  92. return 0;
  93.  
  94. }
  95.  

Diff to submission s747

grassshop.cpp

--- c4.s747.cteam107.grasshop.cpp.0.grassshop.cpp
+++ c4.s859.cteam107.grasshop.cpp.0.grassshop.cpp
@@ -16,12 +16,46 @@
 {               
                         pole[x][y] = jump;
-                        check(x+2, y+1,jump+1);
-                        check(x+2, y-1,jump+1);
-                        check(x-2, y+1,jump+1);
-                        check(x-2, y-1,jump+1);
-                        check(x+1, y+2,jump+1);
-                        check(x+1, y-2,jump+1);
-                        check(x-1, y+2,jump+1);
-                        check(x-1, y-2,jump+1);
+                        if(abs(x-posFx) < 4 && abs(y-posFy) < 4 )
+                        {
+                                check(x+2, y+1,jump+1);
+                                check(x+2, y-1,jump+1);
+                                check(x-2, y+1,jump+1);
+                                check(x-2, y-1,jump+1);
+                                check(x+1, y+2,jump+1);
+                                check(x+1, y-2,jump+1);
+                                check(x-1, y+2,jump+1);
+                                check(x-1, y-2,jump+1);
+                        }
+                        else
+                        {
+                                if(x-posFx < 0)
+                                {
+                                        if(y-posFy<0)
+                                                if(abs(x-posFx) < abs(y-posFy))
+                                                        check(x+1, y+2,jump+1);
+                                                else
+                                                        check(x+2, y+1,jump+1); 
+                                        else
+
+                                                if(abs(x-posFx) < abs(y-posFy))
+                                                        check(x+1, y-2,jump+1);
+                                                else
+                                                        check(x+2, y-1,jump+1); 
+                                }
+                                else
+                                {
+                                        if(y-posFy<0)
+                                                if(abs(x-posFx) < abs(y-posFy))
+                                                        check(x-1, y+2,jump+1);
+                                                else
+                                                        check(x-2, y+1,jump+1); 
+                                        else
+
+                                                if(abs(x-posFx) < abs(y-posFy))
+                                                        check(x-1, y-2,jump+1);
+                                                else
+                                                        check(x-2, y-1,jump+1); 
+                                }
+                        }
                 }
         }
@@ -41,4 +75,12 @@
                 check(posSx-1, posSy-1, 0);
                 
+                                
+                /*for(int i = 0; i<sizex; i++)
+                {
+                        for(int j = 0; j<sizey; j++)
+                                printf("%d", pole[i][j]);
+                        printf("\n");
+                }*/
+
 
                 if(pole[posFx-1][posFy-1]==1000)