Submission

Status:

[PPPPPPPP-SSSSSSSSSSSSSSSSSSSSSSSSSSS]

Subtask/Task Score:

{0/100}

Score: 0

User: iij

Problemset: ย่องเบาหลบกับระเบิด

Language: cpp

Time: 0.087 second

Submitted On: 2025-10-23 18:09:41

#include <bits/stdc++.h>

#define vi vector<int>
#define vvi vector<vi>
using namespace std;

int m, n, dirs[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
int bombDirs[8][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}, {1, 1}, {-1, -1}, {1, -1}, {-1, 1}};

int bfs(vvi v) {
    queue<tuple<int, int, int>> q;
    for (int i = 0; i < m; i++) if (v[i][0]) q.push({i, 0, 1});

    vector<vector<bool>> visited(m, vector<bool>(n, 0));

    while (!q.empty()) {
        auto cur = q.front();
        int row = get<0>(cur), col = get<1>(cur), dist = get<2>(cur);
        q.pop();

        if (col == n-1) return dist;

        for (auto d : dirs) {
            int nrow = row + d[0], ncol = col + d[1];
            if (nrow >= 0 && ncol >= 0 && nrow < m && ncol < n && v[nrow][ncol] == 1 && !visited[nrow][ncol]) {
                visited[nrow][ncol] = 1;
                q.push({nrow, ncol, dist+1});
            }
        }
    }

    return -1;
}

int main() {
    cin >> m >> n;

    vvi v(m, vi(n));
    for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) cin >> v[i][j];

    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (!v[i][j]) {
                for (auto d : bombDirs) {
                    int nrow = i + d[0], ncol = j + d[1];
                    if (nrow >= 0 && ncol >= 0 && nrow < m && ncol < n) v[nrow][ncol] = 9;
                }
            }
        }
    }

    cout << bfs(v);
}