Submission

Status:

[PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: syndrxme

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

Language: cpp

Time: 0.099 second

Submitted On: 2026-03-14 11:58:22

#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 dy=-1;dy<=1;dy++){
            for(int dx=-1;dx<=1;dx++){
                int nr = p.first+dy;
                int nc = p.second+dx;
                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});
                grid[nr][nc]=0;
            }
        }
    }
    cout<<-1;
    return 0;
}