Submission
Status:
[PPPPPPPP-SSSSSSSSSSSSSSSSSSSSSSSSSSS]
Subtask/Task Score:
{0/100}
Score: 0
User: tha_smith
Problemset: ย่องเบาหลบกับระเบิด
Language: cpp
Time: 0.048 second
Submitted On: 2026-02-28 16:21:27
#include <bits/stdc++.h>
using namespace std;
int grid[1005][1005],dp[1005][1005],vis[1005][1005],N,M,n,d[4][2]={{0,-1},{-1,0},{1,0},{0,1}};
queue<pair<int,int>> q;
int main() {
ios_base::sync_with_stdio(0),cin.tie(0);
cin >> N >> M;
for(int i=1; i<=N; i++) {
for(int j=1; j<=M; j++) {
cin >> n;
if(grid[i][j])
continue;
if(n==0) {
grid[i][j] = grid[i-1][j-1] = grid[i-1][j] = grid[i-1][j+1] = grid[i][j-1] = grid[i][j+1] = grid[i+1][j-1] = grid[i+1][j] = grid[i+1][j+1] = 1;
vis[i][j] = vis[i-1][j-1] = vis[i-1][j] = vis[i-1][j+1] = vis[i][j-1] = vis[i][j+1] = vis[i+1][j-1] = vis[i+1][j] = vis[i+1][j+1] = 1;
}
}
}
// for(int i=1; i<=N; i++) {
// for(int j=1; j<=M; j++) {
// cout << grid[i][j];
// }
// cout << '\n';
// }
for(int i=1; i<=N; i++) {
if(grid[i][1])
continue;
q.push({i,1});
vis[i][1]=1;
}
while(!q.empty()) {
auto[x,y] = q.front();
q.pop();
//cout << x << ' ' << y << '\n';
for(int k=0; k<4; k++) {
int xx = x+d[k][0];
int yy = y+d[k][1];
if(xx<1 || xx>N || yy<1 || yy>M)
continue;
if(vis[xx][yy] || grid[xx][yy])
continue;
vis[xx][yy]=1;
dp[xx][yy] = dp[x][y]+1;
q.push({xx,yy});
//cout << x << ' ' << y << ' ' << xx << ' ' << yy << ' ' << dp[xx][yy] << '\n';
}
}
int mn = INT_MAX;
for(int i=1; i<=N; i++) {
if(dp[i][M]<=0)
continue;
mn = min(mn,dp[i][M]);
}
if(mn==INT_MAX) {
cout<<-1;
}
else {
cout << mn+1;
}
}