Source code for submission s606

Go to diff to previous submission

grasshop.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int q[120000];
  6. int qrp;
  7. int qwp;
  8. int visited[200][200];
  9. int r,c;
  10.  
  11. void qi(int x, int y, int d) {
  12. if (visited[x][y]) return;
  13. if (x < 1 || y < 1) return;
  14. if (x > r || y > c) return;
  15. visited[x][y] = 1;
  16. q[qwp++] = x;
  17. q[qwp++] = y;
  18. q[qwp++] = d;
  19. }
  20.  
  21. void qr(int *x, int *y, int *d) {
  22. *x = q[qrp++];
  23. *y = q[qrp++];
  24. *d = q[qrp++];
  25. }
  26.  
  27. int main(int argc, char **argv)
  28. {
  29. int gr,gc,lr,lc;
  30.  
  31. int cr,cc,cd;
  32. int poss;
  33.  
  34. while (1) {
  35. scanf("%d %d %d %d %d %d", &r, &c, &gr, &gc, &lr, &lc);
  36. if (feof(stdin))
  37. break;
  38. qrp = 0;
  39. qwp = 0;
  40. memset(visited, 0, sizeof(int)*200*200);
  41. qi(gr,gc,0);
  42. poss = 0;
  43. while (qrp < qwp) {
  44. qr(&cr,&cc,&cd);
  45. if (cr==lr && cc==lc) {
  46. printf("%d\n", cd);
  47. poss = 1;
  48. break;
  49. }
  50. qi(cr-2, cc-1, cd+1);
  51. qi(cr-1, cc-2, cd+1);
  52. qi(cr-2, cc+1, cd+1);
  53. qi(cr-1, cc+2, cd+1);
  54. qi(cr+2, cc-1, cd+1);
  55. qi(cr+1, cc-2, cd+1);
  56. qi(cr+2, cc+1, cd+1);
  57. qi(cr+1, cc+2, cd+1);
  58. }
  59. if (poss==0) printf("impossible\n");
  60. }
  61. return 0;
  62. }
  63.  

Diff to submission s602

grasshop.c

--- c4.s602.cteam129.grasshop.c.0.grasshop.c
+++ c4.s606.cteam129.grasshop.c.0.grasshop.c
@@ -30,4 +30,5 @@
         
         int cr,cc,cd;
+        int poss;
         
         while (1) {
@@ -39,8 +40,10 @@
                 memset(visited, 0, sizeof(int)*200*200);
                 qi(gr,gc,0);
+                poss = 0;
                 while (qrp < qwp) {
                         qr(&cr,&cc,&cd);
                         if (cr==lr && cc==lc) {
                                 printf("%d\n", cd);
+                                poss = 1;
                                 break;
                         }
@@ -54,5 +57,5 @@
                         qi(cr+1, cc+2, cd+1);
                 }
-                if (qrp >= qwp) printf("impossible\n");
+                if (poss==0) printf("impossible\n");
         }
         return 0;