# 13923 - Plankton's clever plan >author: Utin ###### tags: `BFS` --- ## Brief See the code below ## Solution 0 ```cpp= #include <bits/stdc++.h> struct State { int x, y, step; State(int x, int y, int s) : x(x), y(y), step(s) {} }; int M, N, Start[2], End[2], Mov[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; char Map[1005][1005]; bool Grid[1005][1005]; std::queue<State> process; int main() { // get input std::cin >> M >> N; for (int i = 0; i <= M + 1; i++) { for (int j = 0; j <= N + 1; j++) { if (i == 0 || j == 0 || i == M + 1 || j == N + 1) { Map[i][j] = '#'; Grid[i][j] = true; } else { std::cin >> Map[i][j]; if (Map[i][j] == 'P') Start[0] = i, Start[1] = j; if (Map[i][j] == '@') End[0] = i, End[1] = j; if (Map[i][j] == '#') Grid[i][j] = true; } } } // BFS process.push(State(Start[0], Start[1], 0)); Grid[Start[0]][Start[1]] = true; while (process.size()) { State curr = process.front(); process.pop(); for (int i = 0; i < 4; i++) { if (Map[curr.x + Mov[i][0]][curr.y + Mov[i][1]] == '@') { std::cout << curr.step + 1 << '\n'; return 0; } if (!Grid[curr.x + Mov[i][0]][curr.y + Mov[i][1]]) { process.push(State(curr.x + Mov[i][0], curr.y + Mov[i][1], curr.step + 1)); Grid[curr.x + Mov[i][0]][curr.y + Mov[i][1]] = true; } } } std::cout << -1 << '\n'; } // By Utin ``` ## Reference