Submission
Status:
[P-SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS]
Subtask/Task Score:
{0/100}
Score: 0
User: Zenzaza
Problemset: ย่องเบาหลบกับระเบิด
Language: cpp
Time: 0.002 second
Submitted On: 2025-12-07 14:53:46
#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;
}