Advertisement
Josif_tepe

Untitled

Sep 18th, 2022
788
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.04 KB | None | 0 0
  1. #include <iostream>
  2. #include <map>
  3. #include <vector>
  4. #include <queue>
  5. using namespace std;
  6.  
  7. struct node {
  8.     int ci, cj;
  9.     int cost;
  10.     node() {}
  11.     node(int _ci, int _cj, int _cost) {
  12.         ci = _ci;
  13.         cj = _cj;
  14.         cost = _cost;
  15.     }
  16.    
  17.     bool operator < (const node &t) const {
  18.         return cost > t.cost;
  19.     }
  20. };
  21. class TimeMaze {
  22. public:
  23.     int minTime(vector<string> mat, int htime, int vtime) {
  24.         int n = mat.size(), m = mat[0].size();
  25.        
  26.         int si, sj, ei, ej;
  27.        
  28.         for(int i = 0; i < n; i++) {
  29.             for(int j = 0; j < m; j++) {
  30.                 if(mat[i][j] == 'S') {
  31.                     si = i;
  32.                     sj = j;
  33.                 }
  34.                 if(mat[i][j] == 'E') {
  35.                     ei = i;
  36.                     ej = j;
  37.                     mat[i][j] = '0';
  38.                 }
  39.             }
  40.         }
  41.         int di[] = {-1, 1, 0, 0};
  42.         int dj[] = {0, 0, -1, 1};
  43.         bool visited[n][m];
  44.         memset(visited, false, sizeof visited);
  45.         priority_queue<node> pq;
  46.         pq.push(node(si, sj, 0));
  47.        
  48.         while(!pq.empty()) {
  49.             node c = pq.top();
  50.             pq.pop();
  51.             visited[c.ci][c.cj] = true;
  52.             if(c.ci == ei and c.cj == ej) {
  53.                 return c.cost;
  54.             }
  55.             for(int i = 0; i < 4; i++) {
  56.                 int ti = c.ci + di[i];
  57.                 int tj = c.cj + dj[i];
  58.                 if(ti >= 0 and ti < n and tj >= 0 and tj < m and !visited[ti][tj] and mat[ti][tj] != '#') {
  59.                     int t = -1;
  60.                     if(i < 2) {
  61.                         t = vtime;
  62.                     }
  63.                     else {
  64.                         t = htime;
  65.                     }
  66.                     pq.push(node(ti, tj, c.cost + (mat[ti][tj] - '0') + t));
  67.                    
  68.                 }
  69.             }
  70.         }
  71.         return -1;
  72.     }
  73. };
  74. int main()
  75. {
  76.      return 0;
  77. }
  78. /*
  79.  
  80.  
  81. 111#SE#222
  82.  
  83. S111111
  84. 9#####1
  85. 99E1111
  86.  
  87.  **/
  88.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement