Source code for submission s562

grass.cpp

  1. #include <algorithm>
  2. #include <cctype>
  3. #include <cmath>
  4. #include <complex>
  5. #include <cstdio>
  6. #include <cstring>
  7. #include <iomanip>
  8. #include <iostream>
  9. #include <list>
  10. #include <map>
  11. #include <queue>
  12. #include <set>
  13. #include <sstream>
  14. #include <stack>
  15. #include <string>
  16. #include <utility>
  17. #include <vector>
  18.  
  19. using namespace std;
  20. #define DEBUG(x) cerr << ">>> " << #x << " : " << x << endl;
  21. #define REP(i,a) for (int i = 0; i < (a); ++i)
  22. #define FOR(i,a,b) for (int i = (a); i <= (b); ++i)
  23. #define FORD(i,a,b) for (int i = (a); i >= (b); --i)
  24. inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
  25.  
  26. const int INF = 1<<29;
  27. typedef long long ll;
  28. //////////////////////////////////
  29.  
  30. queue<int> qx, qy;
  31. int dist[111][111];
  32.  
  33. int R, C;
  34.  
  35. void add(int x, int y, int d){
  36. if(x >= 0 && y >= 0 && x < R && y < C && dist[x][y] == -1){
  37. dist[x][y] = d;
  38. qx.push(x);
  39. qy.push(y);
  40. }
  41. }
  42.  
  43. int main() {
  44. int Sx, Sy, Cx, Cy;
  45. while(scanf("%d%d%d%d%d%d", &R, &C, &Sx, &Sy, &Cx, &Cy) != EOF){
  46. Sx--; Sy--; Cx--; Cy--;
  47. while(!qx.empty()){ qx.pop(); qy.pop(); }
  48. REP(i, R) REP(j, C) dist[i][j] = -1;
  49. add(Sx, Sy, 0);
  50. while(!qx.empty()){
  51. int x = qx.front(), y = qy.front();
  52. qx.pop(); qy.pop();
  53. if(x == Cx && y == Cy) break;
  54. FOR(dx, -2, 2) FOR(dy, -2, 2) if(dx * dx + dy * dy == 5) add(x + dx, y + dy, dist[x][y] + 1);
  55. }
  56. if(dist[Cx][Cy] == -1) printf("impossible\n");
  57. else printf("%d\n", dist[Cx][Cy]);
  58. }
  59. return 0;
  60. }
  61.