Source code for submission s1117

Go to diff to previous submission

grasshop.cpp

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <deque>
  5. #include <string>
  6. using namespace std;
  7.  
  8. typedef struct
  9. {
  10. int x;
  11. int y;
  12. } bod;
  13. int pole[100][100];
  14. bool jevectverci(int x, int y, int r, int c)
  15. {
  16. return ((x >= 0 && x < r) && (y >= 0 && y < c))?true:false;
  17. }
  18.  
  19. int main()
  20. {
  21. int r, c, gr, gc, lr, lc;
  22. while(scanf("%d %d %d %d %d %d", &r, &c, &gr, &gc, &lr, &lc) == 6)
  23. {
  24. for(int i=0; i<r; i++)
  25. for(int j=0; j<c; j++)
  26. {
  27. pole[i][j] = 0;
  28. }
  29. pole[lr-1][lc-1] = -1;
  30.  
  31. deque<bod> prosle;
  32. bod b;
  33. b.x = gr-1;
  34. b.y = gc-1;
  35. prosle.push_front(b);
  36.  
  37. deque<bod> nove;
  38.  
  39. int vysledek = -1;
  40. int pocet = 1;
  41. int max = 0;
  42. pole[(prosle.back()).x][(prosle.back()).y] = pocet;
  43. bool nenalezeno = true;
  44. if (gr==lr && gc==lc)
  45. {
  46. nenalezeno = false;
  47. vysledek = 1;
  48. }
  49. while(nenalezeno && max < 100000)
  50. {
  51. max++;
  52. if (!nove.empty())
  53. prosle = nove;
  54. nove.clear();
  55. pocet++;
  56. while(prosle.size() > 0)
  57. {
  58. if (jevectverci((prosle.back()).x+2,(prosle.back()).y+1,r,c))
  59. {
  60. if (pole[(prosle.back()).x+2][(prosle.back()).y+1] == 0)
  61. {
  62. pole[(prosle.back()).x+2][(prosle.back()).y+1] = pocet;
  63. b.x = (prosle.back()).x+2;
  64. b.y = (prosle.back()).y+1;
  65. nove.push_front(b);
  66. }
  67. else if (pole[(prosle.back()).x+2][(prosle.back()).y+1] == -1)
  68. {
  69. vysledek = pocet;
  70. nenalezeno = false;
  71. break;
  72. }
  73. }
  74. if (jevectverci((prosle.back()).x+2,(prosle.back()).y-1,r,c))
  75. {
  76. if (pole[(prosle.back()).x+2][(prosle.back()).y-1] == 0)
  77. {
  78. pole[(prosle.back()).x+2][(prosle.back()).y-1] = pocet;
  79. b.x = (prosle.back()).x+2;
  80. b.y = (prosle.back()).y-1;
  81. nove.push_front(b);
  82. }
  83. else if (pole[(prosle.back()).x+2][(prosle.back()).y-1] == -1)
  84. {
  85. vysledek = pocet;
  86. nenalezeno = false;
  87. break;
  88. }
  89. }
  90. if (jevectverci((prosle.back()).x-2,(prosle.back()).y+1,r,c))
  91. {
  92. if (pole[(prosle.back()).x-2][(prosle.back()).y+1] == 0)
  93. {
  94. pole[(prosle.back()).x-2][(prosle.back()).y+1] = pocet;
  95. b.x = (prosle.back()).x-2;
  96. b.y = (prosle.back()).y+1;
  97. nove.push_front(b);
  98. }
  99. else if (pole[(prosle.back()).x-2][(prosle.back()).y+1] == -1)
  100. {
  101. vysledek = pocet;
  102. nenalezeno = false;
  103. break;
  104. }
  105. }
  106. if (jevectverci((prosle.back()).x-2,(prosle.back()).y-1,r,c))
  107. {
  108. if (pole[(prosle.back()).x-2][(prosle.back()).y-1] == 0)
  109. {
  110. pole[(prosle.back()).x-2][(prosle.back()).y-1] = pocet;
  111. b.x = (prosle.back()).x-2;
  112. b.y = (prosle.back()).y-1;
  113. nove.push_front(b);
  114. }
  115. else if (pole[(prosle.back()).x-2][(prosle.back()).y-1] == -1)
  116. {
  117. vysledek = pocet;
  118. nenalezeno = false;
  119. break;
  120. }
  121. }
  122. if (jevectverci((prosle.back()).x+1,(prosle.back()).y+2,r,c))
  123. {
  124. if (pole[(prosle.back()).x+1][(prosle.back()).y+2] == 0)
  125. {
  126. pole[(prosle.back()).x+1][(prosle.back()).y+2] = pocet;
  127. b.x = (prosle.back()).x+1;
  128. b.y = (prosle.back()).y+2;
  129. nove.push_front(b);
  130. }
  131. else if (pole[(prosle.back()).x+1][(prosle.back()).y+2] == -1)
  132. {
  133. vysledek = pocet;
  134. nenalezeno = false;
  135. break;
  136. }
  137. }
  138. if (jevectverci((prosle.back()).x+1,(prosle.back()).y-2,r,c))
  139. {
  140. if (pole[(prosle.back()).x+1][(prosle.back()).y-2] == 0)
  141. {
  142. pole[(prosle.back()).x+1][(prosle.back()).y-2] = pocet;
  143. b.x = (prosle.back()).x+1;
  144. b.y = (prosle.back()).y-2;
  145. nove.push_front(b);
  146. }
  147. else if (pole[(prosle.back()).x+1][(prosle.back()).y-2] == -1)
  148. {
  149. vysledek = pocet;
  150. nenalezeno = false;
  151. break;
  152.  
  153. }
  154. }
  155. if (jevectverci((prosle.back()).x-1,(prosle.back()).y+2,r,c))
  156. {
  157. if (pole[(prosle.back()).x-1][(prosle.back()).y+2] == 0)
  158. {
  159. pole[(prosle.back()).x-1][(prosle.back()).y+2] = pocet;
  160. b.x = (prosle.back()).x-1;
  161. b.y = (prosle.back()).y+2;
  162. nove.push_front(b);
  163. }
  164. else if (pole[(prosle.back()).x-1][(prosle.back()).y+2] == -1)
  165. {
  166. vysledek = pocet;
  167. nenalezeno = false;
  168. break;
  169. }
  170. }
  171. if (jevectverci((prosle.back()).x-1,(prosle.back()).y-2,r,c))
  172. {
  173. if (pole[(prosle.back()).x-1][(prosle.back()).y-2] == 0)
  174. {
  175. pole[(prosle.back()).x-1][(prosle.back()).y-2] = pocet;
  176. b.x = (prosle.back()).x-1;
  177. b.y = (prosle.back()).y-2;
  178. nove.push_front(b);
  179. }
  180. else if (pole[(prosle.back()).x-1][(prosle.back()).y-2] == -1)
  181. {
  182. vysledek = pocet;
  183. nenalezeno = false;
  184. break;
  185. }
  186. }
  187. prosle.pop_back();
  188. }
  189. }
  190. if (vysledek == -1)
  191. printf("impossible");
  192. else
  193. printf("%d",vysledek-1);
  194. printf("\n");
  195. }
  196. return 0;
  197. }
  198.  
  199.  

Diff to submission s1094

grasshop.cpp

--- c4.s1094.cteam106.grasshop.cpp.0.grasshop.cpp
+++ c4.s1117.cteam106.grasshop.cpp.0.grasshop.cpp
@@ -14,5 +14,5 @@
 bool jevectverci(int x, int y, int r, int c)
 {
-        return ((x >= 0 && x < r) && (y >= 0 && y< c))?true:false; 
+        return ((x >= 0 && x < r) && (y >= 0 && y < c))?true:false; 
 }
 
@@ -37,9 +37,14 @@
                 deque<bod> nove;
 
-                int vysledek = 0;
+                int vysledek = -1;
                 int pocet = 1;
                 int max = 0;
                 pole[(prosle.back()).x][(prosle.back()).y] = pocet;
                 bool nenalezeno = true;
+                if (gr==lr && gc==lc)
+                {
+                        nenalezeno = false;
+                        vysledek = 1;
+                }
                 while(nenalezeno && max < 100000)
                 {       
@@ -183,21 +188,5 @@
                         }
                 }
-                /*
-                for(int i=0; i<r; i++)
-                {
-                        for(int j=0; j<c; j++)
-                        {
-                                printf("%d ",pole[i][j]);
-                        }
-                        printf("\n");
-                }
-                int max = -1;
-                for(int i=0; i<r; i++)
-                        for(int j=0; j<c; j++)
-                        {
-                                if(pole[i][j] > max)
-                                        max = pole[i][j];
-                        }*/
-                if (vysledek == 0)
+                if (vysledek == -1)
                         printf("impossible");
                 else