Source code for submission s814

grasshopper.cpp

  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <queue>
  4. #define INF 999999
  5.  
  6. using namespace std;
  7.  
  8. unsigned int map[100][100];
  9.  
  10. unsigned int dir[8][2] = {{1,2},{-1,2},{1,-2},{-1,-2},{2,1},{-2,1},{2,-1},{-2,-1}};
  11.  
  12. typedef struct point{
  13. point( int a, int b ) : x(a), y(b){}
  14. int x, y;
  15. } t_point;
  16.  
  17. inline bool canHop( int r, int s, int x, int y ) {
  18. return (x < r) && ( y < s) && ( x >= 0) && ( y >= 0) && (map[x][y]==INF);
  19. }
  20.  
  21. int main( int argc, char ** argv ) {
  22. int r,c,gr,gc,lr,lc;
  23. queue<t_point> q;
  24. while( scanf("%d %d %d %d %d %d",&r,&c,&gr,&gc,&lr,&lc) ) {
  25. for( int i = 0; i < r; i++)
  26. for( int j = 0; j < c; j++ )
  27. map[i][j] = INF;
  28.  
  29. //q.clear();
  30. //r--;c--;
  31. gr--;gc--;
  32. lr--;lc--;
  33.  
  34. map[gr][gc] = 0;
  35. t_point point(gr,gc);
  36. q.push( point );
  37.  
  38. while( !q.empty() ) {
  39. point = q.front();
  40. q.pop();
  41. for( int i = 0; i < 8; i++) {
  42. t_point tmp( point.x + dir[i][0], point.y + dir[i][1]);
  43. if( canHop(r,c,tmp.x,tmp.y) ) {
  44. map[ tmp.x][ tmp.y ] = map[ point.x ][ point.y ] + 1;
  45. // printf("%d %d\n", tmp.x + 1, tmp.y + 1);
  46. q.push( tmp );
  47. }
  48. }
  49. }
  50.  
  51. if( map[lr][lc] == INF ) {
  52. printf("impossible\n");
  53. } else {
  54. printf("%d\n",map[lr][lc]);
  55. }
  56.  
  57. }
  58. }