Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <algorithm>
- #include <array>
- #include <bitset>
- #include <cassert>
- #include <charconv>
- #include <chrono>
- #include <cstring>
- #include <fstream>
- #include <functional>
- #include <iomanip>
- #include <iostream>
- #include <list>
- #include <map>
- #include <numeric>
- #include <queue>
- #include <random>
- #include <regex>
- #include <set>
- #include <sstream>
- #include <stack>
- #include <string>
- #include <tuple>
- #include <type_traits>
- #include <unordered_map>
- #include <unordered_set>
- #include <utility>
- #include <vector>
- using namespace std;
- #define valid(i, j, m, n) (i >= 0 && i < m && j >= 0 && j < n)
- constexpr int dx[] = {-1, 0, 0, 1, -1, -1, 1, 1};
- constexpr int dy[] = {0, -1, 1, 0, -1, 1, -1, 1};
- int main() {
- ifstream input{"input.txt"};
- vector<string> lines;
- string line;
- while (getline(input, line)) {
- lines.push_back(line);
- }
- int m = lines.size(), n = lines[0].size();
- int start_i = -1, start_j = -1, end_i = -1, end_j = -1;
- for (int i = 0; i < m; i++) {
- for (int j = 0; j < n; j++) {
- if (lines[i][j] == 'S') {
- start_i = i;
- start_j = j;
- }
- if (lines[i][j] == 'E') {
- end_i = i;
- end_j = j;
- }
- }
- }
- lines[start_i][start_j] = 'a';
- lines[end_i][end_j] = 'z';
- auto solve = [&]() -> int {
- int ans = 0;
- vector<vector<bool>> vis(m, vector<bool>(n));
- queue<pair<int, int>> q;
- q.push({end_i, end_j});
- while (!q.empty()) {
- int sz = q.size();
- while (sz--) {
- auto [i, j] = q.front();
- q.pop();
- if (lines[i][j] == 'a') {
- return ans;
- }
- for (int k = 0; k < 4; k++) {
- int i2 = i + dx[k];
- int j2 = j + dy[k];
- if (!valid(i2, j2, m, n) || lines[i][j] - lines[i2][j2] > 1 ||
- vis[i2][j2]) {
- continue;
- }
- vis[i2][j2] = true;
- q.push({i2, j2});
- }
- }
- ans++;
- }
- return ans;
- };
- cout << solve() << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement