Source code for submission s599

grasshop.c

  1. #include <stdio.h>
  2.  
  3. int Pole[101][101];
  4.  
  5. int FrontaX[100*100*20];
  6. int FrontaY[100*100*20];
  7. int Zac,Kon;
  8. int R,C,Gr,Gc,Lr,Lc,Cc,Cr,T;
  9. int Found;
  10.  
  11. void Skoc(int X, int Y, int Time) {
  12. if ((X<1) || (X>C) || (Y<1) || (Y>R)) return;
  13. if ((Pole[X][Y] > Time) || (Pole[X][Y] == -1)) {
  14. Pole[X][Y]=Time;
  15. FrontaX[++Kon]=X;
  16. FrontaY[Kon]=Y;
  17. };
  18. };
  19.  
  20. int main() {
  21. int x,y;
  22.  
  23. while (scanf("%d%d%d%d%d%d",&R,&C,&Gr,&Gc,&Lr,&Lc)==6) {
  24. for (x=0;x<=R;x++) for (y=0;y<=C;y++) Pole[x][y]=-1;
  25. if ((Gr==Lr) && (Gc == Lc)) {
  26. printf("0\n");
  27. } else {
  28. FrontaX[0]=Gr;
  29. FrontaY[0]=Gc;
  30. Zac=0;
  31. Kon=0;
  32. Found=0;
  33. Pole[Gr][Gc]=0;
  34. while ((Zac<=Kon) && (Found==0)) {
  35. Cc = FrontaX[Zac];
  36. Cr = FrontaY[Zac++];
  37. T = Pole[Cc][Cr];
  38. //printf("%d %d %d %d %d\n",Cc,Cr,T,Zac,Kon);
  39. Skoc(Cr+2,Cc+1,T+1);
  40. Skoc(Cr+2,Cc-1,T+1);
  41. Skoc(Cr-2,Cc+1,T+1);
  42. Skoc(Cr-2,Cc-1,T+1);
  43. Skoc(Cr+1,Cc+2,T+1);
  44. Skoc(Cr+1,Cc-2,T+1);
  45. Skoc(Cr-1,Cc+2,T+1);
  46. Skoc(Cr-1,Cc-2,T+1);
  47. };
  48. if (Pole[Lr][Lc] == -1) {
  49. printf("impossible\n");
  50. } else {
  51. printf("%d\n",Pole[Lr][Lc]);
  52. };
  53. };
  54. };
  55. return 0;
  56. };
  57.