Submission

Status:

[PPPPPPxSSSSSSSSSSSSSSSSSSSSSSSSSSSSS]

Subtask/Task Score:

{0/100}

Score: 0

User: syndrxme

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

Language: cpp

Time: 0.486 second

Submitted On: 2026-03-14 11:56:07

#include<bits/stdc++.h>
using namespace std;

int dr[]={-1,1,0,0};
int dc[]={0,0,-1,1};

int main(){
    int n,m;
    cin>>n>>m;
    vector<vector<int>> grid(n,vector<int>(m));
    vector<pair<int,int>> bomb;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>grid[i][j];
            if(grid[i][j]==0){
                bomb.push_back({i,j});
            }
        }
    }
    for(auto const& p:bomb){
        for(int dr=-1;dr<=1;dr++){
            for(int dc=-1;dc<=1;dc++){
                int nr = p.first+dr;
                int nc = p.second+dc;
                if(nr>=0 && nr<n && nc>=0 && nc<m && grid[nr][nc]!=0){
                    grid[nr][nc]=0;
                }
            }
        }
    }
    // for(int i=0;i<n;i++){
    //     for(int j=0;j<m;j++){
    //         cout<<grid[i][j]<<" ";
    //     }
    //     cout<<"\n";
    // }
    queue<pair<pair<int,int>,int>> q;
    for(int i=0;i<n;i++){
        if(grid[i][0]==1){
            q.push({{i,0},1});
        }
    }

    while(q.empty()==false){
        int r= q.front().first.first;
        int c = q.front().first.second;
        int dist = q.front().second;
        q.pop();
        if(c==m-1){
            cout<<dist;
            return 0;
        }
        for(int i=0;i<4;i++){
            int nr = r + dr[i];
            int nc = c+dc[i];
            if(nr>=0 && nr<n && nc>=0 && nc<m && grid[nr][nc]==1){
                q.push({{nr,nc},dist+1});
            }
        }
    }
    cout<<-1;
    return 0;
}