Advertisement
Josif_tepe

Untitled

Feb 28th, 2021
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.53 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <queue>
  4. using namespace std;
  5. typedef long long  ll;
  6.  
  7. int main() {
  8.     ios_base::sync_with_stdio(false);
  9.     int n, m;
  10.     cin >> n >> m;
  11.     char mat[n][m];
  12.     for(int i = 0; i < n; i++) {
  13.         for(int j = 0; j < m; j++) {
  14.             cin >> mat[i][j];
  15.         }
  16.     }
  17.     int dist[n][m];
  18.     int si = -1, sj = -1; // redot na S, kolonata na S
  19.     for(int i = 0; i < n; i++) {
  20.         for(int j = 0; j < m; j++) {
  21.             dist[i][j] = -1;
  22.             if(mat[i][j] == 'S') {
  23.                 si = i;
  24.                 sj = j;
  25.             }
  26.         }
  27.     }
  28.     int di[] = {-1, 1, 0, 0};
  29.     int dj[] = {0,  0, -1,1};
  30.     queue<int> q;
  31.     q.push(si);
  32.     q.push(sj);
  33.     dist[si][sj] = 0;
  34.     while(!q.empty()) {
  35.         int ci = q.front(); // momentalno i od poleto
  36.         q.pop();
  37.         int cj = q.front(); // momentalno j od poleto
  38.         q.pop();
  39.         for(int i = 0; i < 4; i++) {
  40.             int ti = ci + di[i];
  41.             int tj = cj + dj[i];
  42.             if(ti < 0 or tj < 0 or ti >= n or tj >= m) continue;
  43.             if(mat[ti][tj] == '#') continue;
  44.             if(dist[ti][tj] != -1) continue;
  45.             q.push(ti);
  46.             q.push(tj);
  47.             dist[ti][tj] = dist[ci][cj] + 1;
  48.         }
  49.     }
  50.     for(int i = 0; i < n; i++) {
  51.         for(int j = 0; j < m; j++) {
  52.             cout << i + 1 <<  " " << j + 1 << " " << dist[i][j] << endl;
  53.         }
  54.     }
  55.     return 0;
  56. }
  57. /*
  58. #####
  59. ..S..
  60. ..#..
  61.  E....
  62. #####
  63.  visited[n][m]
  64.  Queue: (1, 2, 0)
  65.  visited[1][2] = true;
  66.  
  67.  (1, 2) --> (1, 3); (1, 1)
  68.  
  69.  Queue: (1, 3, 1), (1, 1, 1)
  70.  visited[1][3] = true
  71.  visited[1][1] = true
  72.  
  73.  (1, 3) --> (1, 4); (2, 3)
  74.  
  75.  Queue: (1, 1, 1); (1, 4, 2); (2, 3, 2)
  76.  visited[1][4] = true;
  77.  visited[2][3] = true;
  78.  
  79.  (1, 1) --> (1, 0); (2, 1)
  80.  
  81.  Queue: (1, 4, 2); (2, 3, 2); (1, 0, 2); (2, 1, 2)
  82.  visited[1][0] = true;
  83.  visited[2][1] = true;
  84.  
  85.  (1, 4) --> (2, 4, 3)
  86.  
  87.  Queue: (2, 3, 2); (1, 0, 2); (2, 1, 2); (2, 4, 3)
  88.  visited[2][4] = true;
  89.  
  90.  (2, 3) --> (3, 3, 3)
  91.  
  92.  Queue: (1, 0, 2); (2, 1, 2); (2, 4, 3): (3, 3, 3)
  93.  visited[3][3] = true;
  94.  
  95.  QueueL (2, 1, 2); (2, 4, 3); (3, 3, 3)
  96.  (2, 1) --> (2, 0, 3); (3, 1, 3)
  97.  
  98.  Queue: (2, 4, 3); (3, 3, 3); (2, 0, 3); (3, 1, 3)
  99.  visited[2][0] = true;
  100.  visited[3][1]
  101.  
  102.  (2, 4) --> (3, 4)
  103.  Queue: (3, 3, 3); (2, 0, 3); (3, 1, 3); (3, 4, 4)
  104.  visited[3][4] = true;
  105.  
  106.  (3, 3) --> (3, 2)
  107.  
  108.  QueueL (2, 0, 3); (3, 1, 3); (3, 4, 4); (3, 2, 4)
  109.  visited[3][2] = true;
  110.  (2, 0, 3) --> (3, 0, 4); ANSWER
  111.  
  112.  **/
  113.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement