Advertisement
Josif_tepe

Untitled

Nov 24th, 2024
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.75 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <queue>
  4. #include <cmath>
  5. #include <map>
  6. using namespace std;
  7.  
  8.  
  9. int main() {
  10.     int n, m;
  11.     cin >> n >> m;
  12.    
  13.     int si, sj;
  14.     int ei, ej;
  15.    
  16.     char mat[n][m];
  17.     for(int i = 0; i < n; i++) {
  18.         for(int j = 0; j < m; j++) {
  19.             cin >> mat[i][j];
  20.            
  21.             if(mat[i][j] == 'P') {
  22.                 si = i;
  23.                 sj = j;
  24.             }
  25.             if(mat[i][j] == 'K') {
  26.                 ei = i;
  27.                 ej = j;
  28.             }
  29.         }
  30.     }
  31.    
  32.     vector<vector<bool>> visited(n, vector<bool>(m, false));
  33.     vector<vector<bool>> visited2(n, vector<bool>(m, false));
  34.     vector<vector<bool>> visited3(n, vector<bool>(m, false));
  35.  
  36.     queue<int> q;
  37.     q.push(si);
  38.     q.push(sj);
  39.     q.push(0);
  40.     q.push(1);
  41.    
  42.     while(!q.empty()) {
  43.         int ci = q.front();
  44.         q.pop();
  45.         int cj = q.front();
  46.         q.pop();
  47.         int dist = q.front();
  48.         q.pop();
  49.         int cekor = q.front();
  50.         q.pop();
  51.        
  52.         if(ci == ei and cj == ej) {
  53.             cout << dist << endl;
  54.             break;
  55.         }
  56.        
  57.         if(cekor == 1) {
  58.             if(ci + 1 < n and mat[ci + 1][cj] != '#' and !visited[ci + 1][cj]) {
  59.                 q.push(ci + 1);
  60.                 q.push(cj);
  61.                 q.push(dist + 1);
  62.                 q.push(2);
  63.                 visited[ci + 1][cj] = true;
  64.             }
  65.             if(ci - 1 >= 0 and mat[ci - 1][cj] != '#' and !visited[ci - 1][cj]) {
  66.                 q.push(ci - 1);
  67.                 q.push(cj);
  68.                 q.push(dist + 1);
  69.                 q.push(2);
  70.                 visited[ci - 1][cj] = true;
  71.             }
  72.             if(cj + 1 < m and mat[ci][cj + 1] != '#' and !visited[ci][cj + 1]) {
  73.                 q.push(ci);
  74.                 q.push(cj + 1);
  75.                 q.push(dist + 1);
  76.                 q.push(2);
  77.                 visited[ci][cj + 1] = true;
  78.             }
  79.             if(cj - 1 >= 0 and mat[ci][cj - 1] != '#' and !visited[ci][cj - 1]) {
  80.                 q.push(ci);
  81.                 q.push(cj - 1);
  82.                 q.push(dist + 1);
  83.                 q.push(2);
  84.                 visited[ci][cj - 1] = true;
  85.             }
  86.         }
  87.         else if(cekor == 2) {
  88.             if(ci + 2 < n and mat[ci + 1][cj] != '#' and mat[ci + 2][cj] != '#' and !visited2[ci + 2][cj]) {
  89.                 q.push(ci + 2);
  90.                 q.push(cj);
  91.                 q.push(dist + 1);
  92.                 q.push(3);
  93.             }
  94.             if(ci - 2 >= 0 and mat[ci - 1][cj] != '#' and mat[ci - 2][cj] != '#' and !visited2[ci - 2][cj]) {
  95.                 q.push(ci - 2);
  96.                 q.push(cj);
  97.                 q.push(dist + 1);
  98.                 q.push(3);
  99.                 visited2[ci - 2][cj] = true;
  100.             }
  101.             if(cj + 2 < m and mat[ci][cj + 1] != '#' and mat[ci][cj + 2] != '#' and !visited2[ci][cj + 2]) {
  102.                 q.push(ci);
  103.                 q.push(cj + 2);
  104.                 q.push(dist + 1);
  105.                 q.push(3);
  106.                 visited2[ci][cj + 2] = true;
  107.             }
  108.             if(cj - 2 >= 0 and mat[ci][cj - 1] != '#' and mat[ci][cj - 2] != '#' and !visited2[ci][cj - 2]) {
  109.                 q.push(ci);
  110.                 q.push(cj - 2);
  111.                 q.push(dist + 1);
  112.                 q.push(3);
  113.                 visited2[ci][cj - 2] = true;
  114.             }
  115.         }
  116.         else if(cekor == 3) {
  117.             if(ci + 3 < n and mat[ci + 1][cj] != '#' and mat[ci + 2][cj] != '#' and mat[ci + 3][cj] != '#' and !visited3[ci + 3][cj]) {
  118.                 q.push(ci + 3);
  119.                 q.push(cj);
  120.                 q.push(dist + 1);
  121.                 q.push(1);
  122.                 visited3[ci + 3][cj] = true;
  123.             }
  124.             if(ci - 3 >= 0 and mat[ci - 1][cj] != '#' and mat[ci - 2][cj] != '#' and mat[ci - 3][cj] != '#' and !visited3[ci - 3][cj]) {
  125.                 q.push(ci - 3);
  126.                 q.push(cj);
  127.                 q.push(dist + 1);
  128.                 q.push(1);
  129.                 visited3[ci - 3][cj] = true;
  130.             }
  131.             if(cj + 3 < m and mat[ci][cj + 1] != '#' and mat[ci][cj + 2] != '#' and mat[ci][cj + 3] != '#' and !visited3[ci][cj + 3]) {
  132.                 q.push(ci);
  133.                 q.push(cj + 3);
  134.                 q.push(dist + 1);
  135.                 q.push(1);
  136.                 visited3[ci][cj + 3] = true;
  137.             }
  138.             if(cj - 3 >= 0 and mat[ci][cj - 1] != '#' and mat[ci][cj - 2] != '#' and mat[ci][cj - 3] != '#' and !visited3[ci][cj - 3]) {
  139.                 q.push(ci);
  140.                 q.push(cj - 3);
  141.                 q.push(dist + 1);
  142.                 q.push(1);
  143.                 visited3[ci][cj - 3] = true;
  144.             }
  145.         }
  146.        
  147.     }
  148.     return 0;
  149. }
  150.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement