Submission

Status:

[PPPPPPPP-SSSSSSSSSSSSSSSSSSSSSSSSSSS]

Subtask/Task Score:

{0/100}

Score: 0

User: s0m30n3

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

Language: cpp

Time: 0.082 second

Submitted On: 2026-03-18 15:29:27

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

int dx[8] = {-1,1,0,0,-1,1,1,-1};
int dy[8] = {0,0,-1,1,1,-1,1,-1};
int table[1005][1005];
bool vis[1005][1005];

int main(){
    int n,m;
    cin>>n>>m;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>table[i][j];
        }
    }
    // Place bombs area
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(table[i][j]==0){
                for(int k=0;k<8;k++){
                    int ny=i+dy[k];
                    int nx=j+dx[k];
                    if(nx<0||ny<0||nx>=m||ny>=n) continue;
                    table[ny][nx]=2;
                }
            }
        }
    }
   
   queue<pair<pair<int,int>, int>> q;
   for(int i=0;i<n;i++){
     if(table[i][0]==1){
        q.push({{i,0},1});
        vis[i][0]=true;
     }
   }
   while(!q.empty()){
        auto t = q.front();
        q.pop();
        auto u = t.first.first;
        auto v = t.first.second;
        auto d = t.second;
        if(v==m-1){
            cout << d << '\n';
            return 0;
        }
        for(int k=0;k<4;k++){
            int ny = u+dy[k];
            int nx = v+dx[k];
            if(nx<0||ny<0||nx>=m||ny>=n) continue;
            if(table[ny][nx]==2||table[ny][nx]==0) continue;
            if(vis[ny][nx]) continue;
            vis[ny][nx]=true;
            q.push({{ny,nx}, d+1});
        }
   }
   cout << "-1";
   return 0;
}