Submission
Status:
[P-SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS]
Subtask/Task Score:
{0/100}
Score: 0
User: ztmy_
Problemset: ย่องเบาหลบกับระเบิด
Language: cpp
Time: 0.002 second
Submitted On: 2026-03-16 11:24:50
#include <bits/stdc++.h>
using namespace std;
int dx[] = {1,-1,0,0,1,-1,1,-1};
int dy[] = {0,0,1,-1,1,-1,-1,1};
int sx[] = {1,-1,0,0};
int sy[] = {0,0,1,-1};
queue<pair<int, int>> idx;
vector<vector<bool>> visited;
vector<vector<int>> dist;
int bfs(int row, int col){
int m = 1e9;
while(!idx.empty()){
auto cur = idx.front();
int y = cur.first;
int x = cur.second;
idx.pop();
if (x == col-1){
if (dist[y][x] < m) m = dist[y][x];
}
for (int i = 0; i < 4; i++){
int Ay = y + sy[i];
int Ax = x + sx[i];
if (Ay >= 0 && Ay < row && Ax >= 0 && Ax < col && !visited[Ay][Ax]){
idx.push({Ay, Ax});
visited[Ay][Ax] = true;
dist[Ay][Ax] = dist[y][x]+1;
}
}
}
return m;
}
int main(){
int row, col;
cin >> row >> col;
vector<vector<int>> arr(row, vector<int>(col));
visited.assign(row, vector<bool>(col, false));
dist.assign(row, vector<int>(col, -1));
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++) cin >> arr[i][j];
}
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
if (arr[i][j] == 0 && !visited[i][j]){
visited[i][j] = true;
for (int k = 0; k < 8; k++){
if (i+dy[k] >= 0 && i+dy[k] < row && j+dx[k] >= 0 && j+dx[k] < col){
arr[i+dy[k]][j+dx[k]] = 0;
visited[i+dy[k]][j+dx[k]] = true;
}
}
}
}
}
for (int i = 0; i < row; i++){
if (arr[i][0] == 1){
idx.push({i, 0});
dist[i][0] = 1;
}
}
cout << bfs(row, col);
}