Submission

Status:

[-SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS]

Subtask/Task Score:

{0/100}

Score: 0

User: Quaoar

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

Language: cpp

Time: 0.003 second

Submitted On: 2026-01-01 16:30:22

#include <iostream>
#include <algorithm>
#include <vector>
#include <tuple>
#include <queue>
using namespace std;

int n,m;
vector<vector<int>> map;

int bfs(vector<vector<int>> &map){
    int dx[] = {-1,1,0,0};
    int dy[] = {0,0,-1,1};

    queue<tuple<int,int,int>> q;

    vector<vector<bool>> visited(n, vector<bool>(m, false));

    for (int i = 0 ; i < n ; i++){
        if (map[i][0] == 1){
            q.push({i, 0, 0});
            visited[i][0] = true;
        }
    }

    while (!q.empty())
    {
        tuple <int,int,int> t = q.front();
        int x = get<0>(t);
        int y = get<1>(t);
        int len = get<2>(t);
        q.pop();

        if (y == m - 1){
            return len;
        }

        for (int i = 0 ; i < 4 ; i++){
            int nx = x + dx[i];
            int ny = y + dy[i];
        

            if (nx >= 0 && nx < n && ny >= 0 && ny < m && !visited[nx][ny] && map[nx][ny] == 1){
                visited[nx][ny] = true;
                q.push({nx,ny,len + 1});
            }
        }
    }
    return -1;  
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n >> m;
    for (int i = 0 ; i < n ; i++){
        vector<int> row;
        for (int j = 0 ; j < m ; j++){ 
            int temp;
            cin >> temp;
            row.push_back(temp);
        }
        map.push_back(row);
    }
    for (int i = 0 ; i < n ; i++){
        for (int j = 0 ; j < m ; j++){
            if (map[i][j] == 0){

                for (int nx = -1 ; nx <= 1 ; nx++){
                    for (int ny = -1 ; ny <= 1 ; ny++){
                        if (nx + i < n && nx + i >= 0){
                            if (ny + j < m && ny + j >= 0 && map[nx + i][ny + j] != 0) map[nx + i][ny + j] = 2;
                        }
                    }
                }
                
            }
        }
    }
    
    cout << "\n";
    for (int i = 0 ; i < n ; i++){
        for (int j = 0 ; j < m ; j++){
            cout << map[i][j] << " ";
        }
        cout << "\n";
    }
    
    if (bfs(map) == -1){
        cout << -1;
    } else {
        cout << bfs(map) + 1;
    }
    return 0;
}