Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 459
- #include <algorithm>
- #include <iostream>
- #include <vector>
- #include <queue>
- using namespace std;
- const char UP = 'N';
- const char DOWN = 'S';
- const char LEFT = 'W';
- const char RIGHT = 'E';
- struct Point {
- int i;
- int j;
- };
- void Bfs(const vector<vector<bool>>& is_available, vector<vector<char>>& turns) {
- queue<Point> q;
- q.push({ 250, 250 });
- while (!q.empty()) {
- auto [i, j] = q.front();
- q.pop();
- for (int di = -1; di <= 1; ++di) {
- for (int dj = -1; dj <= 1; ++dj) {
- if (di * di + dj * dj != 1) continue;
- int ni = i + di;
- int nj = j + dj;
- if (ni < 0 || is_available.size() <= ni ||
- nj < 0 || is_available.front().size() <= nj) {
- continue;
- }
- if (turns[ni][nj] != '0') continue;
- if (di == -1) {
- turns[ni][nj] = DOWN;
- } else if (di == 1) {
- turns[ni][nj] = UP;
- } else if (dj == -1) {
- turns[ni][nj] = LEFT;
- } else if (dj == 1) {
- turns[ni][nj] = RIGHT;
- }
- q.push({ ni, nj });
- }
- }
- }
- }
- int main() {
- ios::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- vector<vector<bool>>is_available(500, vector<bool>(500, false));
- string path;
- cin >> path;
- const int start_i = 250;
- const int start_j = 250;
- is_available[start_i][start_j] = true;
- int i = start_i;
- int j = start_j;
- for (auto move : path) {
- if (move == RIGHT) {
- j += 1;
- }
- else if (move == LEFT) {
- j -= 1;
- }
- else if (move == UP) {
- i += 1;
- }
- else if (move == DOWN) {
- i -= 1;
- }
- is_available[i][j] = true;
- }
- vector<vector<char>> turns(is_available.size(), vector<char>(is_available.size(), '0'));
- Bfs(is_available, turns);
- string shortest_way_out;
- while (!(i == start_i && j == start_j)) {
- if (turns[i][j] == UP) {
- --i;
- shortest_way_out += DOWN;
- } else if (turns[i][j] == DOWN) {
- ++i;
- shortest_way_out += UP;
- }
- else if (turns[i][j] == LEFT) {
- ++j;
- shortest_way_out += RIGHT;
- } else {
- --j;
- shortest_way_out += LEFT;
- }
- }
- reverse(begin(shortest_way_out), end(shortest_way_out));
- cout << shortest_way_out;
- return 0;
- }
- /*
- tets1
- EENNESWSSWE
- NWW
- test2
- SWNNESSWN
- NES
- test3
- WSEENWWSES
- NENW
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement