Submission

Status:

[PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: Gunto

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

Language: cpp

Time: 0.060 second

Submitted On: 2026-03-04 15:16:23

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3;
int visited[maxn][maxn];


struct GRID {
    int i, j;
};
queue<GRID> qu;

int di[4] = {-1,0,1,0};
int dj[4] = {0,1,0,-1};

int main(){
    cin.tie(nullptr)->sync_with_stdio(0);
   int r, c;
    cin >> r >> c;
    vector<vector<int>> m(r, vector<int>(c, 0));
    
    for(int i=0;i<r;++i){
        for(int j=0;j<c;++j){
            cin>>m[i][j];
        }
    }
    //solve
     vector<vector<int>> ans = m;
    for(int i=0;i<r;++i){
        for(int j=0;j<c;++j){
            bool ch=0;
            for(int k=max(0,i-1);k<=min(r-1,i+1);++k){
                for(int kk=max(0,j-1);kk<=min(c-1,j+1);++kk){
                    if(m[k][kk]==0){
                         ans[i][j]=0;
                         ch=1;
                         break;
                    }
                }
                if(ch==1) break;
            }
        }
    }

    // for(int i=0;i<r;++i){
    //     for(int j=0;j<c;++j){
    //         cout<<ans[i][j];
    //     }cout<<"\n";
    // }
    //this is ok
    for(int i=0; i<r; i++){
        qu.push({i,0});
        visited[i][0] = 1;
    }
    
    
    while(!qu.empty()){
        int i = qu.front().i;
        int j = qu.front().j;
        qu.pop();

        if(j == c-1){
            cout << visited[i][j] ;
            return 0;
        }
        for(int k=0; k<4; k++){
            int ii = i+di[k];
            int jj = j+dj[k];

            if(ii < 0 || jj < 0 || ii > r-1 || jj > c-1) continue;
            if(visited[ii][jj]) continue;
            if(!ans[ii][jj]) continue;

            qu.push({ii, jj});
            visited[ii][jj] = visited[i][j]+1;
        }
    }
    cout << -1 << '\n';

    return 0;
}