Advertisement
El_GEMMY

go from S to E #2

Sep 10th, 2021
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.16 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <ext/pb_ds/assoc_container.hpp>
  3.  
  4. using namespace std;
  5. using namespace __gnu_pbds;
  6.  
  7. typedef long long ll;
  8. typedef unsigned long long ull;
  9. typedef tree<int,null_type,less<>,rb_tree_tag,tree_order_statistics_node_update> indexed_set;
  10.  
  11. #define all(v) v.begin(),v.end()
  12. #define rall(v) v.rbegin(),v.rend()
  13. #define MOD 1000000007
  14. #define PI 3.14159265
  15. #define ceil(a, b) ((a / b) + (a % b ? 1 : 0))
  16. #define imin INT_MIN
  17. #define imax INT_MAX
  18. #define nl '\n'
  19. #define modulo(a, b, m) ((a % m) * (b % m)) % m
  20.  
  21. void Start_Crushing() {
  22.     ios::sync_with_stdio(false);
  23.     cin.tie(nullptr);
  24.     cout.tie(nullptr);
  25. #ifndef ONLINE_JUDGE
  26.     freopen("input.txt", "r", stdin);
  27.     freopen("output.txt", "w", stdout);
  28. #endif
  29. }
  30. //vector<int> dx = {0, 0, 1, -1, 1, 1, -1, -1}, dy = {1, -1, 0, 0, 1, -1, 1, -1};
  31. int dx[] = {0, 0, 1, -1}, dy[] = {1, -1, 0, 0};
  32. vector<vector<char>> grid;
  33. vector<vector<bool>> vis;
  34. int n, m;
  35.  
  36. bool isValid(int i, int j){
  37.     return i <= n and j <= m and i > 0 and j > 0 and grid[i][j] != '*' and !vis[i][j];
  38. }
  39.  
  40. bool pathFound(int x, int y){
  41. //    if(x == n - 1 and y == m - 1) return grid[x][y] == 'E';
  42.     if(grid[x][y] == 'E') return true;
  43.  
  44.     vis[x][y] = true;
  45.     bool thereIs = false;
  46.  
  47.     for(int i = 0; i < 4; i++){
  48.         int newX = x + dx[i], newY = y + dy[i];
  49.         if(isValid(newX, newY)){
  50.             thereIs |= pathFound(newX, newY);
  51.         }
  52.     }
  53.  
  54.     return thereIs;
  55. }
  56.  
  57. void solve(){
  58.     cin >> n >> m;
  59.     grid.assign(n + 5, vector<char>(m + 5, '.'));
  60.     vis.assign(n + 5, vector<bool>(m + 5, false));
  61.     pair<int, int> start;
  62.  
  63.     for(int i = 1; i <= n; i++){
  64.         for(int j = 1; j <= m; j++){
  65.             cin >> grid[i][j];
  66.             if(grid[i][j] == 'S'){
  67.                 start = {i, j};
  68.             }
  69.         }
  70.     }
  71.  
  72.     bool ans = pathFound(start.first, start.second);
  73.  
  74.     cout << (ans ? "YES" : "NO");
  75. }
  76.  
  77. int main(){
  78.     //        freopen("equal.in", "r", stdin);
  79.     Start_Crushing();
  80.     int t = 1;
  81. //    /*is Single Test case?*/ cin >> t;
  82.     while (t--) {
  83.         solve();
  84.         if(!t) break;
  85.         cout << "\n";
  86.     }
  87.  
  88.     return 0;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement