Source code for submission s683

grasshop.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAX 101*101
  5.  
  6. int pole[MAX]; //ulozenie v jednom poli
  7.  
  8. int p1[8]={1,2,2,1,-1,-2,-2,-1};
  9. int p2[8]={2,1,-1,-2,-2,-1,1,2};
  10.  
  11. int zac1, zac2;
  12. int kon1, kon2;
  13.  
  14. int i,j,k,velkost, s1,s2, r1, r2, zmenilo_sa; //d-velkost
  15. int m, n; //rozmery
  16.  
  17. int main(){
  18.  
  19. while(scanf("%d %d %d %d %d %d", &m, &n, &zac1, &zac2, &kon1, &kon2)==6){
  20. //vynulujeme pole
  21.  
  22. zac1--;
  23. zac2--;
  24. kon1--;
  25. kon2--;
  26.  
  27. velkost = m*n - 1;
  28. for(i=0; i<velkost+2; i++) {pole[i]=0;}
  29. pole[zac1*m+zac2]=1; //zaciatok
  30. /*
  31. for(i=0; i<m; i++){
  32. for(j=0; j<n; j++){
  33. printf("%d ", pole[i*m +j]);
  34. }
  35. printf("\n");
  36. }
  37. */
  38.  
  39. //vlna
  40. j=1; s1 = zac1; s2=zac2; zmenilo_sa = 1;
  41. while((pole[kon1*m+kon2]==0)&&(zmenilo_sa == 1)){
  42. zmenilo_sa = 0;
  43.  
  44. for(s1 = 0; s1<m; s1++){
  45. for(s2 = 0; s2 < n; s2++){
  46.  
  47. if(pole[s1*m+s2]==j){
  48. //okolie zvysime o 1
  49. for(i=0; i<8; i++){
  50.  
  51. r1 = s1+p1[i];
  52. r2 = s2+p2[i];
  53.  
  54. if(r1 >=0 && r1 < m && r2 >= 0 && r2 < n){
  55. //sme na sachovnici
  56. if(pole[r1*m+r2]==0){
  57. pole[r1*m+r2] = j+1;
  58. zmenilo_sa=1; //pojde to dalej
  59. }
  60. }
  61. }
  62. }
  63.  
  64. }
  65.  
  66. }
  67. j++;
  68. //nasleduje dalsia vlna
  69. }
  70.  
  71. if(pole[kon1*m+kon2]==0){
  72. printf("impossible\n");
  73. }
  74. else{
  75. printf("%d\n", pole[kon1*m+kon2]-1);
  76. }
  77. /*
  78. for(i=0; i<m; i++){
  79. for(j=0; j<n; j++){
  80. printf("%d ", pole[i*m +j]);
  81. }
  82. printf("\n");
  83. }
  84. */
  85. }
  86.  
  87.  
  88. return 0;
  89.  
  90. }
  91.