Submission

Status:

[PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: Regent

Problemset: ย่องเบาหลบกับระเบิด

Language: cpp

Time: 0.065 second

Submitted On: 2026-03-05 20:57:05

#include<bits/stdc++.h>
#define Kana ios::sync_with_stdio(false);cin.tie(nullptr);
using namespace std;

int n,m;
int dx8[] = {-1,-1,-1,0,0,1,1,1};
int dy8[] = {-1,0,1,-1,1,-1,0,1};
int dx4[] = {0,0,1,-1};
int dy4[] = {1,-1,0,0};

int main(){
    Kana;

    cin >> n >> m;
    vector<vector<int>> grid(n,vector<int>(m));
    vector<vector<int>> bad(n,vector<int>(m,0));
    vector<vector<int>> dist(n,vector<int>(m,-1));

    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            cin >> grid[i][j];

    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(grid[i][j]==0){
                bad[i][j]=1;
                for(int k=0;k<8;k++){
                    int ni=i+dx8[k];
                    int nj=j+dy8[k];
                    if(ni>=0 && nj>=0 && ni<n && nj<m)
                        bad[ni][nj]=1;
                }
            }
        }
    }

    queue<pair<int,int>> q;

    for(int i=0;i<n;i++){
        if(!bad[i][0]){
            q.push({i,0});
            dist[i][0]=1;
        }
    }

    while(!q.empty()){
        auto [x,y]=q.front();
        q.pop();

        for(int k=0;k<4;k++){
            int nx=x+dx4[k];
            int ny=y+dy4[k];

            if(nx>=0 && ny>=0 && nx<n && ny<m){
                if(!bad[nx][ny] && dist[nx][ny]==-1){
                    dist[nx][ny]=dist[x][y]+1;
                    q.push({nx,ny});
                }
            }
        }
    }

    int ans=INT_MAX;

    for(int i=0;i<n;i++){
        if(dist[i][m-1]!=-1)
            ans=min(ans,dist[i][m-1]);
    }

    if(ans==INT_MAX) cout<<-1;
    else cout<<ans;
}