Submission
Status:
[PPPPPPPP-SSSSSSSSSSSSSSSSSSSSSSSSSSS]
Subtask/Task Score:
{0/100}
Score: 0
User: Dormon
Problemset: ย่องเบาหลบกับระเบิด
Language: cpp
Time: 0.092 second
Submitted On: 2025-05-29 14:05:19
#include <bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;
vector<pair<int, int>> dir = {{-1, 0}, {0, 1}, {1, 0}, {0, 1}};
int main()
{
int n, m;
cin >> n >> m;
vector<vector<int>> grid(n + 2, vector<int>(m + 2, 10));
for (int i = 1;i <= n;i++)
for (int j = 1;j <= m;j++){
int t;
cin >> t;
if (t == 0){
for (int di = -1;di <= 1;di++)
for (int dj = -1;dj <= 1;dj++)
grid[i + di][j + dj] = 0;
}
else
grid[i][j] = min(grid[i][j], t);
}
auto invalid = [&](int i, int j) -> bool {
return i < 1 || i > n || j < 1 || j > m || grid[i][j] == 0;
};
struct A {
int i, j, w;
};
queue<A> q;
for (int i = 1;i <= n;i++)
if (grid[i][1])
q.push({i, 1, 1});
while (!q.empty()){
auto [i, j, w] = q.front(); q.pop();
if (grid[i][j] == 0) continue;
grid[i][j] = 0;
if (j == m){
cout << w << '\n';
return 0;
}
for (auto [di, dj]:dir)
if (!invalid(i + di, j + dj))
q.push({i + di, j + dj, w + 1});
}
cout << "-1";
return 0;
}