Submission

Status:

[PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: APNICHANAN

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

Language: cpp

Time: 0.067 second

Submitted On: 2026-03-06 15:34:45

#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll a[1005][1005] , mini = 1e9 , d[1005][1005];
ll bx[8] = {1,1,1,0,0,-1,-1,-1} , by[8] = {1,0,-1,1,-1,1,0,-1} ;
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int n , m ; cin >> n >> m ;

    for (int i = 1 ; i <= n ; i++)
        for (int j = 1 ; j <= m ; j++){
            cin >> a[i][j] ;
            d[i][j] = 1e9 ;
        }

    for (int i = 1 ; i <= n ; i++)
        for (int j = 1 ; j <= m ; j++){
            if (a[i][j] == 0){
                for (int k =0 ; k < 8 ; k++){
                    if (i + by[k] < 1 || j + bx[k] < 1 || i + by[k] > n || j + bx[k] > m)
                    continue;
                    if (a[i + by[k]][j + bx[k]] != 0)
                        a[i + by[k]][j + bx[k]] = -1 ;
                }
            }
        }
    ll dx[4] = {0,0,1,-1} , dy[4] = {1,-1,0,0} ;

    queue<pair<ll,ll>> q ;
    for (int j = 1 ; j <= n ; j++){
    q.push({j,1}) ;
    d[j][1] = 1 ;
    }
    while (!q.empty()){
        ll ny = q.front().first , nx = q.front().second;
        q.pop() ;
        for (int i = 0 ; i < 4 ; i++){
            ll nxtx = nx + dx[i] , nxty = ny + dy[i] ;
            if (nxtx <= 0 || nxty <= 0 || nxtx > m || nxty > n || a[nxty][nxtx] <= 0)
                continue;
            if (d[nxty][nxtx] > d[ny][nx] + 1 ){
                d[nxty][nxtx] = d[ny][nx] + 1 ;
                q.push({nxty , nxtx}) ;
            }
        }
    }


    for (int j = 1 ; j <= n ; j++){
        mini = min(d[j][m] , mini) ;
    }

    if (mini == 1e9)
        cout << "-1\n" ;
    else
        cout << mini << "\n" ;
}