Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define loop(a, b) for(int a = 1;a <= b;a++)
- #define ff first
- #define ss second
- using namespace std;
- typedef pair<pair<int, int> , int> pii;
- const int maxn = 309;
- bool vis[maxn][maxn][4];
- char a[maxn][maxn];
- int dx[] = {1,-1,0,0};
- int dy[] = {0,0,1,-1};
- bool valid(int R, int C, int i, int j){
- if(i < 1 || i > R || j < 1 || j > C)
- return false;
- if(a[i][j] == '#')
- return false;
- return true;
- }
- int main() {
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- int T;
- cin >> T;
- while(T--){
- int R, C, ans = 0;
- pair<int, int> s, e;
- queue<pii> q;
- cin >> R >> C;
- loop(i, R)
- loop(j, C){
- cin >> a[i][j];
- }
- loop(i, R){
- loop(j, C){
- if(a[i][j] == 'S')
- s.ff = i, s.ss = j;
- if(a[i][j] == 'E')
- e.ff = i, e.ss = j;
- }
- }
- q.push({{s.ff, s.ss}, 1});
- while(!q.empty() && !ans){
- pii temp = q.front(); q.pop();
- int x = temp.ff.ff;
- int y = temp.ff.ss;
- int m = temp.ss;
- int mve = m % 3;
- // printf("x == %d, y == %d, m == %d\n", x, y, m);
- if(!mve) mve = 3;
- if(vis[x][y][mve]) continue;
- vis[x][y][mve] = true;
- for(int i = 0;i < 4 && !ans;i++){
- bool ok = true;
- for(int j = 1;j <= mve && ok;j++){
- if(!valid(R, C, x + j * dx[i], y + j *dy[i]))
- ok = false;
- }
- if(ok){
- if(x + mve*dx[i] == e.ff && y + mve*dy[i] == e.ss){
- cout << m <<endl;
- ans=1;
- }
- else{
- q.push({{x + mve*dx[i], y + mve*dy[i]}, m+1});
- }
- }
- }
- }
- if(!ans) cout << "NO" <<endl;
- for(int i = 0;i < maxn;i++) for(int j = 0;j < maxn;j++) for(int k = 0;k < 4;k++)
- vis[i][j][k] = false;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement