Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define FOR(i, n) for(int i=0;i<n;i++)
- #define RFOR(i, n) for(int i=n-1;i>=0;i--)
- #define pb push_back
- #define mp make_pair
- #define fi first
- #define se second
- const int MAX_ROWS=1000;
- const int MAX_COLUMS=1000;
- int x[8]={0, 0, 1, -1, 1, -1, 1, -1};
- int y[8]={-1, 1, 0, 0, -1, 1, 1, -1};
- char matrix[MAX_ROWS][MAX_COLUMS];
- int visited[MAX_ROWS][MAX_COLUMS];
- int main()
- {
- int num_rows, num_columns;
- cin>>num_rows>>num_columns;
- pair<int, int> s;
- pair<int, int> e;
- FOR(i, num_rows)
- {
- FOR(j, num_columns)
- {
- cin>>matrix[i][j];
- if(matrix[i][j]=='S')
- {
- s.fi=i;
- s.se=j;
- }
- if(matrix[i][j]=='E')
- {
- e.fi=i;
- e.se=j;
- }
- }
- }
- memset(visited, 0, sizeof(visited));
- visited[s.fi][s.se]=0;
- queue<pair<int, int> > q;
- q.push(mp(s.fi, s.se));
- while(!q.empty())
- {
- int top_x=q.front().fi;
- int top_y=q.front().se;
- q.pop();
- if(top_x==e.fi&&top_y==e.se)
- {
- cout<<visited[top_x][top_y]<<endl;
- return 0;
- }
- for(int i=0;i<4;i++)
- {
- int _x=top_x+x[i];
- int _y=top_y+y[i];
- if(_x<num_rows&&_y<num_columns&&_x>=0&&_y>=0&&visited[_x][_y]==0&&matrix[_x][_y]!='#')
- {
- q.push(mp(_x, _y));
- visited[_x][_y]=visited[top_x][top_y]+1;
- }
- }
- }
- cout<<-1<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement