Source code for submission s902

main.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int sachovnice[101* 101];
  5. int fronta[101*101];
  6. int fronta_f, fronta_c;
  7. int startx, starty;
  8. int cilx, cily;
  9.  
  10. int w, h;
  11.  
  12. int push(int p)
  13. {
  14. fronta[fronta_f + fronta_c] = p;
  15. fronta_c++;
  16. return 0;
  17. }
  18.  
  19. int pop()
  20. {
  21. int rtn;
  22. if (fronta_c == 0)
  23. return -1;
  24. rtn = fronta[fronta_f];
  25. fronta_f++;
  26. fronta_c--;
  27. return rtn;
  28. }
  29.  
  30. int expand(int x, int y, int t)
  31. {
  32. if (x <= 0 || y <= 0 || x > w || y > h)
  33. return 0;
  34.  
  35. if (sachovnice[x + y * 101] != -1)
  36. return 0;
  37.  
  38. push(x + y * 101);
  39. sachovnice[x + y * 101] = t;
  40. return 1;
  41. }
  42.  
  43. int init()
  44. {
  45. memset(sachovnice, 255, 101 * 101 * sizeof(int));
  46. fronta_f = 0;
  47. fronta_c = 0;
  48. expand(startx, starty, 0);
  49. return 0;
  50. }
  51.  
  52. int main(int argc, char *argv[])
  53. {
  54. int ex, ey;
  55. int v;
  56. int done;
  57.  
  58. while (scanf("%d %d %d %d %d %d", &w, &h, &startx, &starty, &cilx, &cily) == 6)
  59. {
  60. init();
  61.  
  62. done = 0;
  63. do
  64. {
  65. v = pop();
  66. if (v == -1)
  67. {
  68. printf("impossible\n");
  69. done = 1;
  70. }
  71. else
  72. {
  73. if (v == cily * 101 + cilx)
  74. {
  75. printf("%d\n", sachovnice[v]);
  76. done = 1;
  77. }
  78. else
  79. {
  80. ex = v % 101;
  81. ey = v / 101;
  82. expand(ex + 1, ey + 2, sachovnice[v] + 1);
  83. expand(ex - 1, ey + 2, sachovnice[v] + 1);
  84. expand(ex + 1, ey - 2, sachovnice[v] + 1);
  85. expand(ex - 1, ey - 2, sachovnice[v] + 1);
  86. expand(ex + 2, ey + 1, sachovnice[v] + 1);
  87. expand(ex - 2, ey + 1, sachovnice[v] + 1);
  88. expand(ex + 2, ey - 1, sachovnice[v] + 1);
  89. expand(ex - 2, ey - 1, sachovnice[v] + 1);
  90. }
  91. }
  92. }while(!done);
  93. }
  94.  
  95. return 0;
  96. }
  97.