Advertisement
Guest User

Untitled

a guest
Feb 20th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.65 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define FOR(i, n) for(int i=0;i<n;i++)
  6. #define RFOR(i, n) for(int i=n-1;i>=0;i--)
  7. #define pb push_back
  8. #define mp make_pair
  9. #define fi first
  10. #define se second
  11.  
  12.  
  13. const int MAX_ROWS=1000;
  14. const int MAX_COLUMS=1000;
  15.  
  16. int x[8]={0, 0, 1, -1, 1, -1, 1, -1};
  17. int y[8]={-1, 1, 0, 0, -1, 1, 1, -1};
  18.  
  19. char matrix[MAX_ROWS][MAX_COLUMS];
  20. int visited[MAX_ROWS][MAX_COLUMS];
  21.  
  22. int main()
  23. {
  24. int num_rows, num_columns;
  25. cin>>num_rows>>num_columns;
  26. pair<int, int> s;
  27. pair<int, int> e;
  28.  
  29. FOR(i, num_rows)
  30. {
  31. FOR(j, num_columns)
  32. {
  33. cin>>matrix[i][j];
  34. if(matrix[i][j]=='S')
  35. {
  36. s.fi=i;
  37. s.se=j;
  38. }
  39. if(matrix[i][j]=='E')
  40. {
  41. e.fi=i;
  42. e.se=j;
  43. }
  44. }
  45. }
  46. memset(visited, 0, sizeof(visited));
  47. visited[s.fi][s.se]=0;
  48.  
  49. queue<pair<int, int> > q;
  50. q.push(mp(s.fi, s.se));
  51.  
  52. while(!q.empty())
  53. {
  54. int top_x=q.front().fi;
  55. int top_y=q.front().se;
  56. q.pop();
  57.  
  58. if(top_x==e.fi&&top_y==e.se)
  59. {
  60. cout<<visited[top_x][top_y]<<endl;
  61. return 0;
  62. }
  63.  
  64. for(int i=0;i<4;i++)
  65. {
  66. int _x=top_x+x[i];
  67. int _y=top_y+y[i];
  68. if(_x<num_rows&&_y<num_columns&&_x>=0&&_y>=0&&visited[_x][_y]==0&&matrix[_x][_y]!='#')
  69. {
  70. q.push(mp(_x, _y));
  71. visited[_x][_y]=visited[top_x][top_y]+1;
  72. }
  73. }
  74.  
  75. }
  76.  
  77. cout<<-1<<endl;
  78.  
  79.  
  80.  
  81.  
  82.  
  83. return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement