Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define lvl first
- #define row second.first
- #define col second.second
- using namespace std;
- int h, n, m, d[51][51][51];
- char table[51][51][51];
- pair<int, pair<int, int>> s, f;
- pair<int, pair<int, int>> dir[5] = {{0, {-1, 0}}, {0, {0, +1}}, {0, {+1, 0}}, {0, {0, -1}}, {+1, {0, 0}}};
- bool used[51][51][51];
- queue<pair<int, pair<int, int>>> q;
- bool check(int lv, int r, int c) {
- return (1 <= lv && lv <= h && 1 <= r && r <= n && 1 <= c && c <= m && table[lv][r][c] != 'o');
- }
- int main() {
- cin >> h >> n >> m;
- for (int k = 1; k <= h; ++k) {
- for (int i = 1; i <= n; ++i) {
- for (int j = 1; j <= m; ++j) {
- cin >> table[k][i][j];
- if (table[k][i][j] == '1') {
- s = {k, {i, j}};
- d[k][i][j] = 0;
- used[k][i][j] = true;
- q.push({k, {i, j}});
- } else if (table[k][i][j] == '2') {
- f = {k, {i, j}};
- }
- }
- }
- }
- while (!q.empty()) {
- auto v = q.front();
- q.pop();
- for (int i = 0; i < 5; ++i) {
- int k = v.lvl + dir[i].lvl;
- int x = v.row + dir[i].row;
- int y = v.col + dir[i].col;
- if (check(k, x, y) && !used[k][x][y]) {
- used[k][x][y] = true;
- d[k][x][y] = d[v.lvl][v.row][v.col] + 1;
- q.push({k, {x, y}});
- }
- }
- }
- cout << d[f.lvl][f.row][f.col] * 5;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement