Submission
Status:
[PPPPPPPP-SSSSSSSSSSSSSSSSSSSSSSSSSSS]
Subtask/Task Score:
{0/100}
Score: 0
User: s0m30n3
Problemset: ย่องเบาหลบกับระเบิด
Language: cpp
Time: 0.082 second
Submitted On: 2026-03-18 15:29:27
#include<bits/stdc++.h>
using namespace std;
int dx[8] = {-1,1,0,0,-1,1,1,-1};
int dy[8] = {0,0,-1,1,1,-1,1,-1};
int table[1005][1005];
bool vis[1005][1005];
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>table[i][j];
}
}
// Place bombs area
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(table[i][j]==0){
for(int k=0;k<8;k++){
int ny=i+dy[k];
int nx=j+dx[k];
if(nx<0||ny<0||nx>=m||ny>=n) continue;
table[ny][nx]=2;
}
}
}
}
queue<pair<pair<int,int>, int>> q;
for(int i=0;i<n;i++){
if(table[i][0]==1){
q.push({{i,0},1});
vis[i][0]=true;
}
}
while(!q.empty()){
auto t = q.front();
q.pop();
auto u = t.first.first;
auto v = t.first.second;
auto d = t.second;
if(v==m-1){
cout << d << '\n';
return 0;
}
for(int k=0;k<4;k++){
int ny = u+dy[k];
int nx = v+dx[k];
if(nx<0||ny<0||nx>=m||ny>=n) continue;
if(table[ny][nx]==2||table[ny][nx]==0) continue;
if(vis[ny][nx]) continue;
vis[ny][nx]=true;
q.push({{ny,nx}, d+1});
}
}
cout << "-1";
return 0;
}