Source code for submission s1012

grasshop.cpp

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int row[10001];
  5. int col[10001];
  6. int step[10001];
  7. bool map[101][101];
  8. int now,last;
  9. int r,c,lr,lc;
  10.  
  11. int checkAndAdd(int x, int y) {
  12. x += row[now];
  13. y += col[now];
  14. if(x > 0 && x<=r && y>0 && y<=c &&!map[x][y]) {
  15. if(x==lr && y==lc) {
  16. return(step[now]+1);
  17. }
  18. row[++last] = x;
  19. col[last] = y;
  20. step[last] = step[now]+1;
  21. map[x][y]=true;
  22. }
  23. return 0;
  24. }
  25.  
  26. int main() {
  27. int result;
  28. bool found;
  29. while(scanf("%d %d %d %d %d %d",&r, &c, row+0, col+0, &lr, &lc)>0) {
  30. if(row[0]==lr && row[0]==lc){
  31. printf("0\n");
  32. continue;
  33. }
  34. found=false;
  35. now=0;
  36. last=0;
  37. memset(map,0,101*101*sizeof(bool));
  38. map[row[0]][col[0]]=true;
  39. step[0]=0;
  40. result=0;
  41. while(now<=last && !found) {
  42. result = checkAndAdd(1,2);
  43. if(!result) result = checkAndAdd(2,1);
  44. if(!result) result = checkAndAdd(2,-1);
  45. if(!result) result = checkAndAdd(1,-2);
  46. if(!result) result = checkAndAdd(-1,-2);
  47. if(!result) result = checkAndAdd(-2,-1);
  48. if(!result) result = checkAndAdd(-2,1);
  49. if(!result) result = checkAndAdd(-1,2);
  50. if(result) {
  51. printf("%d\n",result);
  52. found = true;
  53. }
  54. now++;
  55. }
  56. if(!found) {
  57. printf("impossible\n");
  58. }
  59. }
  60. return 0;
  61. }
  62.