Advertisement
Mihai_Preda

Untitled

Apr 15th, 2021
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <queue>
  4. #include <unordered_map>
  5.  
  6. using namespace std;
  7.  
  8. int dx[] = {-1, 1, 0, 0, -1, -1, 1, 1};
  9. int dy[] = {0, 0, -1, 1, -1, 1, -1, 1};
  10.  
  11. char mat[102][102], rX, rY, jX, jY;
  12. int n, m;
  13. void lee(int startX, int startY, int dist[102][102])
  14. {
  15.     for(int i = 1; i <= n; i++)
  16.         for(int j = 1; j <= m; j++)
  17.             dist[i][j] = -1;
  18.     queue<pair<int, int> > q;
  19.     q.push({startX, startY});
  20.     dist[startX][startY] = 1;
  21.  
  22.     while(q.empty() == false)
  23.     {
  24.         pair<int, int> p = q.front();
  25.         q.pop();
  26.  
  27.         for(int d = 0; d < 8; d++)
  28.         {
  29.             int newX = p.first + dx[d];
  30.             int newY = p.second + dy[d];
  31.             if(newX >= 1 && newY >= 1 && newX <= n && newY <= m &&
  32.                mat[newX][newY] != 'X' && dist[newX][newY] == -1)
  33.             {
  34.                 dist[newX][newY] = dist[p.first][p.second] + 1;
  35.                 q.push({newX, newY});
  36.             }
  37.         }
  38.     }
  39. }
  40.  
  41. int romeo[102][102], julieta[102][102];
  42. int main()
  43. {
  44.     ifstream in("rj.in");
  45.     ofstream out("rj.out");
  46.     in >> n >> m;
  47.     for(int i = 1; i <= n; ++i)
  48.     {
  49.         in.get();
  50.         in.get(mat[i]+1, m+1, '\n');
  51.     }
  52.     for(int i = 1; i <= n; i++)
  53.         for(int j = 1; j <= m; j++)
  54.         {
  55.             if(mat[i][j] == 'R')
  56.             {
  57.                 rX = i;
  58.                 rY = j;
  59.             }
  60.             else if(mat[i][j] == 'J')
  61.             {
  62.                 jX = i;
  63.                 jY = j;
  64.             }
  65.         }
  66.  
  67.     lee(rX, rY, romeo);
  68.     lee(jX, jY, julieta);
  69.  
  70.     int tmin = n*m, x, y;
  71.     for(int i = 1; i <= n; i++)
  72.         for(int j = 1; j <= m; j++)
  73.         {
  74.             if(romeo[i][j] != -1 && romeo[i][j] == julieta[i][j] && romeo[i][j] < tmin)
  75.             {
  76.                 tmin = romeo[i][j];
  77.                 x = i;
  78.                 y = j;
  79.             }
  80.         }
  81.     out << tmin << " " << x << " " << y;
  82.     return 0;
  83. }
  84.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement