Submission
Status:
[PPPPPPPP-SSSSSSSSSSSSSSSSSSSSSSSSSSS]
Subtask/Task Score:
{0/100}
Score: 0
User: Quaoar
Problemset: ย่องเบาหลบกับระเบิด
Language: cpp
Time: 0.086 second
Submitted On: 2026-03-06 19:58:38
#include <bits/stdc++.h>
using namespace std;
vector <vector <int>> mp;
vector <vector <int>> dist;
vector <int> ans;
int x[] = {-1 , 1 , 0 , 0};
int y[] = {0 , 0 , 1 , -1};
void bfs (vector<vector<int>>mp){
int n = mp.size();
int m = mp[0].size();
queue<pair<int,int>> q;
for (int i = 0 ; i < n ; i++){
if (mp[i][0] == 1){
q.push({i , 0});
dist[i][0] = 1;
}
}
while (!q.empty()){
int r = q.front().first;
int c = q.front().second;
q.pop();
if (c == m - 1){
ans.push_back(dist[r][c]);
}
for (int i = 0 ; i < 4 ; i++){
int nr = r + x[i];
int nc = c + y[i];
if (nr < 0 || nr >= n || nc < 0 || nc >= m)
continue;
if (mp[nr][nc] != 1)
continue;
if (dist[nr][nc] == -1){
dist[nr][nc] = dist[r][c] + 1;
q.push({nr , nc});
}
}
}
}
int main(){
int n ,m;
cin >> n >> m;
mp.resize(n , vector<int>(m));
dist.resize(n , vector<int>(m , -1));
for (int i = 0 ; i < n ; i++){
for (int j = 0 ; j < m ; j++){
cin >> mp[i][j];
}
}
for (int i = 0 ; i < n ; i++){
for (int j = 0 ; j < m ; j++){
if (mp[i][j] == 0){
for (int x = -1 ; x <= 1 ; x++){
for (int y = -1 ; y <= 1 ;y++){
if (i + x < 0 || i + x >= n || j + y < 0 || j + y >= m)
continue;
mp[i + x][j + y] = -1;
}
}
}
}
}
bfs(mp);
int mn = 10000000;
if (ans.empty()){
cout << -1;
return 0;
}
for (int i = 0 ; i < ans.size() ; i++){
mn = min(ans[i] , mn);
}
cout << mn;
return 0;
}