Submission

Status:

[P-SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS]

Subtask/Task Score:

{0/100}

Score: 0

User: Zenzaza

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

Language: cpp

Time: 0.003 second

Submitted On: 2025-12-07 14:53:37

#include <bits/stdc++.h>

using namespace std;

int main() {
    cin.tie(NULL)->sync_with_stdio(false);
    int n,m;
    cin >> n >> m;
    int mat[n+5][m+5] = {0};
    int vs[n+5][m+5] = {0};
    int dist[n+5][m+5];
    int di[4] = {-1, 0, 1, 0}, dj[4] = {0, 1, 0, -1};
    queue<pair<int,int>> q;

    for (int i=1; i<=n; i++)
    {
        for (int j=1; j<=m; j++)
        {
            int t;
            cin >> t;
            if (t==0)
            {
                mat[i][j] = -1;
                for (int k=0; k<4; k++)
                {
                    
                    mat[i+di[k]][j+dj[k]] = -1;
                    
                }
            }
            else
            {
                if (mat[i][j]!=-1)
                {
                    mat[i][j] = t;
                }
            }
        }
    }
    
    for (int i=1; i<=n; i++)
    {
        if (!vs[i][1])
        {
            q.push({i,1});
            vs[i][1] = 1;
            dist[i][1] = 0;
        }
    }
    int check = 0, ans;
    while (!q.empty())
    {
        auto x = q.front();
        q.pop();
        for (int k=0; k<4; k++)
        {
            if (vs[x.first+di[k]][x.second+dj[k]]==0 && mat[x.first+di[k]][x.second+dj[k]]==1)
            {
                q.push({x.first+di[k], x.second+dj[k]});
                dist[x.first+di[k]][x.second+dj[k]] = dist[x.first][x.second]+1;
                if (x.second+dj[k] == m)
                {
                    ans = dist[x.first+di[k]][x.second+dj[k]]+1;
                    check = 1;
                    break;
                }
            }
        }
        if (check)
        {
            break;
        }
    }

    if (!check)
    {
        ans = -1;
    }

    cout << ans;
}