Sreekar_0125

Untitled

Mar 24th, 2024
765
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.30 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define F first
  4. #define S second
  5. #define pii pair<int, int>
  6.  
  7. pair<int, int> s, d;
  8. int n, m, b;
  9. vector<pair<int, int>> moves = {{1, 1}, {1, -1}, {-1, 1}, {-1, -1}, {0, 1}, {0, -1}, {-1, 0}, {1, 0}};
  10. vector<vector<bool>> vis(101, vector<bool>(101, false));
  11. map<pair<int, int>, pair<int, int>> par;
  12. vector<vector<char>> v(101, vector<char>(101, '.'));
  13.  
  14. bool isValid(pii x)
  15. {
  16.     return (0 <= x.F && x.F < n) && (0 <= x.S && x.S < m);
  17. }
  18.  
  19. bool bfs()
  20. {
  21.     sort(moves.begin(), moves.end());
  22.     vis[s.F][s.S] = 1;
  23.     queue<pair<int, int>> q;
  24.     q.push(s);
  25.  
  26.     while (!q.empty())
  27.     {
  28.         pii node = q.front();
  29.         for (auto i : moves)
  30.         {
  31.             pii nei;
  32.             nei.F = node.F + i.F;
  33.             nei.S = node.S + i.S;
  34.  
  35.             if (isValid(nei))
  36.             {
  37.                 if (!vis[nei.F][nei.S])
  38.                 {
  39.                     if (nei.F == d.F && nei.S == d.S)
  40.                     {
  41.                         // found
  42.                         par[nei] = node;
  43.                         vector<pii> path;
  44.                         path.push_back(d);
  45.                         pii start = d;
  46.                         while (start != s)
  47.                         {
  48.                             start = par[start];
  49.                             path.push_back(start);
  50.                         }
  51.                         // path.push_back(start);
  52.                         cout << path.size() - 1 << endl;
  53.                         reverse(path.begin(), path.end());
  54.                         for (int i = 0; i < path.size() - 1; i++)
  55.                         {
  56.                             cout << path[i].F << ',' << path[i].S << " -> ";
  57.                         }
  58.                         cout << d.F << ',' << d.S << endl;
  59.                         return true;
  60.                     }
  61.                     if (v[nei.F][nei.S] != 'x')
  62.                     {
  63.                         par[nei] = node;
  64.                         vis[nei.F][nei.S] = 1;
  65.                         q.push(nei);
  66.                     }
  67.                 }
  68.             }
  69.         }
  70.         q.pop();
  71.     }
  72.     // cout << -1 << endl;
  73.     return false;
  74. }
  75.  
  76. void clear(int n, int m)
  77. {
  78.     for (int i = 0; i < n; i++)
  79.     {
  80.         for (int j = 0; j < m; j++)
  81.         {
  82.             vis[i][j] = false;
  83.         }
  84.     }
  85.     par.clear();
  86. }
  87.  
  88. void solve()
  89. {
  90.     cin >> n >> m >> b;
  91.  
  92.     // pair<int, int> source, dest;
  93.  
  94.     cin >> s.first >> s.second;
  95.     cin >> d.first >> d.second;
  96.  
  97.     // cout << s.F << ' ' << s.S << endl;
  98.     // cout << d.F << ' ' << d.S << endl;
  99.  
  100.     for (int i = 0; i < b; i++)
  101.     {
  102.         int x, y;
  103.         cin >> x >> y;
  104.         v[x][y] = 'x';
  105.     }
  106.  
  107.     if (s.F == d.F && s.S == d.S)
  108.     {
  109.         cout << 0 << endl;
  110.         cout << s.F << ' ' << s.S << endl;
  111.         return;
  112.     }
  113.  
  114.     if (bfs())
  115.         ;
  116.     else
  117.         cout << -1 << endl;
  118.     clear(n, m);
  119. }
  120.  
  121. int main()
  122. {
  123.     freopen("input.txt", "r", stdin);
  124.     freopen("output.txt", "w", stdout);
  125.     freopen("error.txt", "w", stderr);
  126.     /* Enter your code here. Read input from STDIN. Print output to STDOUT */
  127.     int t;
  128.     cin >> t;
  129.     int x = 1;
  130.     while (t--)
  131.     {
  132.         // cout << "tc : " << x++ << endl;
  133.         solve();
  134.     }
  135.     return 0;
  136. }
Advertisement
Add Comment
Please, Sign In to add comment