Source code for submission s1210

grasshop.cpp

  1. #include <cstdlib>
  2. #include <cstdio>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. class field {
  8. public:
  9. int x;
  10. int y;
  11. field(){};
  12. };
  13. int main () {
  14. int matrix [100][100];
  15. int r, c, gr, gc, lr, lc;
  16. int free,cur;
  17. int move;
  18.  
  19.  
  20. field * desk = new field [10000];
  21. while (scanf("%d%d%d%d%d%d",&r,&c,&gr,&gc,&lr,&lc) == 6) {
  22. lr--;
  23. lc--;
  24. gr--;
  25. gc--;
  26. cur = 0;
  27. free = 1;
  28.  
  29. move = 1;
  30. for (int i = 0; i < 100; i++)
  31. for (int j = 0; j < 100; j++)
  32. matrix[i][j] = -1;
  33. matrix[gr][gc] = 0;
  34. desk[cur].x = gr;
  35. desk[cur].y = gc;
  36. while (matrix[lr][lc] == -1 && move) {
  37. move--;
  38. if (desk[cur].x+2 < r &&
  39. desk[cur].y+1 < c &&
  40. matrix[desk[cur].x+2][desk[cur].y+1] == -1) {
  41. desk[free].x= desk[cur].x+2;
  42. desk[free].y= desk[cur].y+1;
  43. matrix[desk[cur].x+2][desk[cur].y+1] = matrix[desk[cur].x][desk[cur].y]+1;
  44. free++;
  45. move++;
  46. }
  47. if (desk[cur].x+2 < r &&
  48. desk[cur].y-1 > -1 &&
  49. matrix[desk[cur].x+2][desk[cur].y-1] == -1) {
  50. desk[free].x= desk[cur].x+2;
  51. desk[free].y= desk[cur].y-1;
  52. matrix[desk[cur].x+2][desk[cur].y-1] = matrix[desk[cur].x][desk[cur].y]+1;
  53. free++;
  54. move++;
  55. }
  56. if (desk[cur].x-2 > -1 &&
  57. desk[cur].y+1 < c &&
  58. matrix[desk[cur].x-2][desk[cur].y+1] == -1) {
  59. desk[free].x= desk[cur].x-2;
  60. desk[free].y= desk[cur].y+1;
  61. matrix[desk[cur].x-2][desk[cur].y+1] = matrix[desk[cur].x][desk[cur].y]+1;
  62. free++;
  63. move++;
  64. }
  65. if (desk[cur].x-2 > -1 &&
  66. desk[cur].y-1 > -1 &&
  67. matrix[desk[cur].x-2][desk[cur].y-1] == -1) {
  68. desk[free].x= desk[cur].x-2;
  69. desk[free].y= desk[cur].y-1;
  70. matrix[desk[cur].x-2][desk[cur].y-1] = matrix[desk[cur].x][desk[cur].y]+1;
  71. free++;
  72. move++;
  73. }
  74. if (desk[cur].x-1 > -1 &&
  75. desk[cur].y+2 < c &&
  76. matrix[desk[cur].x-1][desk[cur].y+2] == -1) {
  77. desk[free].x= desk[cur].x-1;
  78. desk[free].y= desk[cur].y+2;
  79. matrix[desk[cur].x-1][desk[cur].y+2] = matrix[desk[cur].x][desk[cur].y]+1;
  80. free++;
  81. move++;
  82. }
  83. if (desk[cur].x-1 > -1 &&
  84. desk[cur].y-2 > -1 &&
  85. matrix[desk[cur].x-1][desk[cur].y-2] == -1) {
  86. desk[free].x= desk[cur].x-1;
  87. desk[free].y= desk[cur].y-2;
  88. matrix[desk[cur].x-1][desk[cur].y-2] = matrix[desk[cur].x][desk[cur].y]+1;
  89. free++;
  90. move++;
  91. }
  92. if (desk[cur].x+1 < r &&
  93. desk[cur].y+2 < c &&
  94. matrix[desk[cur].x+1][desk[cur].y+2] == -1) {
  95. desk[free].x= desk[cur].x+1;
  96. desk[free].y= desk[cur].y+2;
  97. matrix[desk[cur].x+1][desk[cur].y+2] = matrix[desk[cur].x][desk[cur].y]+1;
  98. free++;
  99. move++;
  100. }
  101. if (desk[cur].x+1 < r &&
  102. desk[cur].y-2 > -1 &&
  103. matrix[desk[cur].x+1][desk[cur].y-2] == -1) {
  104. desk[free].x= desk[cur].x+1;
  105. desk[free].y= desk[cur].y-2;
  106. matrix[desk[cur].x+1][desk[cur].y-2] = matrix[desk[cur].x][desk[cur].y]+1;
  107. free++;
  108. move++;
  109. }
  110. cur++;
  111. }
  112. /*
  113. for (int i = 0; i < r; i++){
  114. for (int j = 0; j < c; j++) {
  115. if (matrix[i][j] == -1)
  116. cout << " ";
  117. else
  118. cout << matrix[i][j] << " ";
  119. }
  120. cout << endl;
  121. }
  122. */
  123. if (matrix[lr][lc] == -1)
  124. cout << "impossible" << endl;
  125. else
  126. cout << matrix[lr][lc] << endl;
  127.  
  128.  
  129.  
  130.  
  131.  
  132. }
  133.  
  134. return 0;
  135. }
  136.