Submission
Status:
[PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP]
Subtask/Task Score:
{100/100}
Score: 100
User: nadfd
Problemset: ย่องเบาหลบกับระเบิด
Language: cpp
Time: 0.142 second
Submitted On: 2025-12-07 17:06:23
#include <bits/stdc++.h>
using namespace std;
int main(){
int n, m;
cin >> n >> m;
vector<vector<int>> field(n+2, vector<int> (m+2, 2));
vector<vector<int>> vs(n+2, vector<int> (m+2, 0));
vector<vector<int>> dist(n+2, vector<int> (m+2, 1e9));
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
cin >> field[i][j];
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
if(field[i][j] == 0){
if(field[i-1][j] != 0) field[i-1][j] = 2;
if(field[i-1][j-1] != 0) field[i-1][j-1] = 2;
if(field[i-1][j+1] != 0) field[i-1][j+1] = 2;
if(field[i][j-1] != 0) field[i][j-1] = 2;
if(field[i][j+1] != 0) field[i][j+1] = 2;
if(field[i+1][j] != 0) field[i+1][j] = 2;
if(field[i+1][j-1] != 0) field[i+1][j-1] = 2;
if(field[i+1][j+1] != 0) field[i+1][j+1] = 2;
}
queue<pair<int, int>> q;
for(int j = 1; j <= n; j++)
if(field[j][1]%2 != 0){
q.push({j, 1});
dist[j][1]=0;
vs[j][1] = 1;
}
while(!q.empty()){
auto [cx, cy] = q.front();
q.pop();
if(!vs[cx+1][cy] && field[cx+1][cy]%2){
vs[cx+1][cy] = 1;
dist[cx+1][cy] = dist[cx][cy]+1;
q.push({cx+1, cy});
}
if(!vs[cx-1][cy] && field[cx-1][cy]%2){
vs[cx-1][cy] = 1;
dist[cx-1][cy] = dist[cx][cy]+1;
q.push({cx-1, cy});
}
if(!vs[cx][cy-1] && field[cx][cy-1]%2){
vs[cx][cy-1] = 1;
dist[cx][cy-1] = dist[cx][cy]+1;
q.push({cx, cy-1});
}
if(!vs[cx][cy+1] && field[cx][cy+1]%2){
vs[cx][cy+1] = 1;
dist[cx][cy+1] = dist[cx][cy]+1;
q.push({cx, cy+1});
}
}
long long mn = 1e9;
for(int j = 1; j <= n; j++)
if(field[j][m]%2 != 0 && dist[j][m] < mn)
mn = dist[j][m];
if(mn == 1e9)
cout << -1;
else
cout << mn+1;
return 0;
}