Advertisement
Guest User

Untitled

a guest
Dec 11th, 2022
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.05 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <algorithm>
  3. #include <array>
  4. #include <bitset>
  5. #include <cassert>
  6. #include <charconv>
  7. #include <chrono>
  8. #include <cstring>
  9. #include <fstream>
  10. #include <functional>
  11. #include <iomanip>
  12. #include <iostream>
  13. #include <list>
  14. #include <map>
  15. #include <numeric>
  16. #include <queue>
  17. #include <random>
  18. #include <regex>
  19. #include <set>
  20. #include <sstream>
  21. #include <stack>
  22. #include <string>
  23. #include <tuple>
  24. #include <type_traits>
  25. #include <unordered_map>
  26. #include <unordered_set>
  27. #include <utility>
  28. #include <vector>
  29. using namespace std;
  30.  
  31. #define valid(i, j, m, n) (i >= 0 && i < m && j >= 0 && j < n)
  32.  
  33. constexpr int dx[] = {-1, 0, 0, 1, -1, -1, 1, 1};
  34. constexpr int dy[] = {0, -1, 1, 0, -1, 1, -1, 1};
  35.  
  36. int main() {
  37.   ifstream input{"input.txt"};
  38.  
  39.   vector<string> lines;
  40.   string line;
  41.   while (getline(input, line)) {
  42.     lines.push_back(line);
  43.   }
  44.   int m = lines.size(), n = lines[0].size();
  45.  
  46.   int start_i = -1, start_j = -1, end_i = -1, end_j = -1;
  47.   for (int i = 0; i < m; i++) {
  48.     for (int j = 0; j < n; j++) {
  49.       if (lines[i][j] == 'S') {
  50.         start_i = i;
  51.         start_j = j;
  52.       }
  53.       if (lines[i][j] == 'E') {
  54.         end_i = i;
  55.         end_j = j;
  56.       }
  57.     }
  58.   }
  59.  
  60.   lines[start_i][start_j] = 'a';
  61.   lines[end_i][end_j] = 'z';
  62.  
  63.   auto solve = [&]() -> int {
  64.     int ans = 0;
  65.     vector<vector<bool>> vis(m, vector<bool>(n));
  66.     queue<pair<int, int>> q;
  67.     q.push({end_i, end_j});
  68.     while (!q.empty()) {
  69.       int sz = q.size();
  70.       while (sz--) {
  71.         auto [i, j] = q.front();
  72.         q.pop();
  73.         if (lines[i][j] == 'a') {
  74.           return ans;
  75.         }
  76.  
  77.         for (int k = 0; k < 4; k++) {
  78.           int i2 = i + dx[k];
  79.           int j2 = j + dy[k];
  80.           if (!valid(i2, j2, m, n) || lines[i][j] - lines[i2][j2] > 1 ||
  81.               vis[i2][j2]) {
  82.             continue;
  83.           }
  84.  
  85.           vis[i2][j2] = true;
  86.           q.push({i2, j2});
  87.         }
  88.       }
  89.       ans++;
  90.     }
  91.  
  92.     return ans;
  93.   };
  94.  
  95.   cout << solve() << endl;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement