Submission
Status:
[PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP]
Subtask/Task Score:
{100/100}
Score: 100
User: hmmm
Problemset: ย่องเบาหลบกับระเบิด
Language: cpp
Time: 0.055 second
Submitted On: 2025-07-22 10:43:45
#include<bits/stdc++.h>
using namespace std;
using pii=array<int,2>;
const int N=1005;
int a[N][N];
bool chk[N][N];
queue<pii> q;
int vis[N][N];
int dx[]={0,0,1,-1,1,1,-1,-1};
int dy[]={1,-1,0,0,-1,1,1,-1};
int main(){
ios::sync_with_stdio(0); cin.tie(0);
int n,m;
cin >> n >> m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin >> a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]==0){
for(int k=0;k<8;k++){
chk[i+dx[k]][j+dy[k]]=true;
}
}
}
}
memset(vis,0x3f,sizeof vis);
for(int i=1;i<=n;i++){
if(!chk[i][1]){
// cout << i << ' ';
q.push({i,1});
vis[i][1]=1;
}
}
while(!q.empty()){
auto x=q.front()[0];
auto y=q.front()[1];
q.pop();
if(x<1 || y<1 || x>n || y>m) continue;
// cout << x << ' ' << y << "\n";
if(y==m){
cout << vis[x][y];
return 0;
}
for(int i=0;i<4;i++){
int xx=x+dx[i];
int yy=y+dy[i];
if(vis[xx][yy]>vis[x][y]+1 && !chk[xx][yy]){
vis[xx][yy]=vis[x][y]+1;
q.push({xx,yy});
}
}
}
cout << "-1";
}