Submission
Status:
[P-SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS]
Subtask/Task Score:
{0/100}
Score: 0
User: Test
Problemset: ย่องเบาหลบกับระเบิด
Language: cpp
Time: 0.002 second
Submitted On: 2026-03-17 14:14:45
#include <bits/stdc++.h>
using namespace std;
int n,m;
vector<vector<char>> grid;
vector<vector<char>> grid2;
int dr[] = {-1, 1, 0, 0, -1, -1, 1, 1};
int dc[] = {0, 0, -1, 1, -1, 1, -1, 1};
void water(int i,int j){
for(int x=0;x<8;x++){
int ni = i+dr[x];
int nj = j+dc[x];
if(ni>=0 && nj>=0 && ni<n && nj<m){
grid2[ni][nj]='0';
}
}
}
vector<vector<int>> dist;
int shortest_path(){
queue<pair<int,int>> q;
//?ش????? fix j ??Ѻ i
for(int i=0;i<n;i++){
if(grid2[i][0]!='0'){
q.push({i,0});
dist[i][0]=1;
}
}
while(!q.empty()) {
int r = q.front().first;
int c = q.front().second;
q.pop();
//?礨ش?? ??ҵ?Ƿ????Ժ?͡?????????ش???? (n-1) ????Ҷ֧????
if(c == m-1) return dist[r][c];
//?Թ 4 ???
for(int x = 0; x < 4; x++){
int nr = r + dr[x];
int nc = c + dc[x];
if(nr >= 0 && nc >= 0 && nr < n && nc < m){
if(grid2[nr][nc] != '0' && dist[nr][nc] == -1){
dist[nr][nc] = dist[r][c] + 1;
q.push({nr, nc});
}
}
}
}
return -1;
}
int main(){
cin >> n >> m;
grid.assign(n, vector<char>(m)); //*****
grid2.assign(n, vector<char>(m)); //*****
dist.assign(n, vector<int>(m,-1));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin >> grid[i][j];
}
}
grid2=grid;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(grid[i][j]=='0'){
water(i,j);
}
}
}
shortest_path();
/*for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cout << dist[i][j] << " ";
}
cout << "\n";
}*/
int mx = -1;
for(int x=0;x<n;x++){
mx=max(mx,dist[x][m-1]);
}
cout << mx;
}
/*
10 10
0 1 1 1 0 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 0 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 0 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 0
1 1 1 1 1 0 1 1 1 1
1 1 1 1 1 1 1 1 1 1
*/
/*
5 5
1 1 1 1 1
1 1 1 1 0
1 1 1 1 1
0 1 1 1 1
0 1 1 1 1
*/