Submission
Status:
[PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP]
Subtask/Task Score:
{100/100}
Score: 100
User: Neozaawwman1
Problemset: ย่องเบาหลบกับระเบิด
Language: cpp
Time: 0.047 second
Submitted On: 2026-03-10 15:47:07
#include <bits/stdc++.h>
using namespace std;
int N,M;
int ed[1005][1005];
bool block[1005][1005];
int ans[1005][1005];
queue<pair<int,int>> q;
int xx[8]={-1,0,0,1,-1,-1,1,1};
int yy[8]={0,1,-1,0,-1,1,-1,1};
int main(){
ios_base::sync_with_stdio(0),cin.tie(0);
cin>>N>>M;
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
cin>>ed[i][j];
}
}
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
if(ed[i][j]==0){
block[i][j]=1;
for(int k=0; k<8; k++){
int ny = i+yy[k];
int nx = j+xx[k];
if(nx<0 || ny<0 || nx>=M || ny>=N)continue;
block[ny][nx]=1;
}
}
}
}
for(int i=0; i<N; i++){
if(!block[i][0]){
ans[i][0]=1;
q.push({i,0});
}
}
while(!q.empty()){
int y = q.front().first;
int x = q.front().second;
q.pop();
//if(block[y][x])continue;
for(int i=0; i<4; i++){
int nx=x+xx[i];
int ny=y+yy[i];
if(nx<0 || ny<0 || nx>=M || ny>=N)continue;
if(block[ny][nx])continue;
if(ans[ny][nx]!=0)continue;
ans[ny][nx]=ans[y][x]+1;
q.push({ny,nx});
}
}
vector<int> v;
for(int i=0; i<N; i++){
if(ans[i][M-1]!=0){
v.push_back(ans[i][M-1]);
}
}
sort(v.begin(),v.end());
if(!v.empty()){
cout<<v[0];
}else{
cout<<-1;
}
return 0;
}