Submission
Status:
[PPPPPPPP-SSSSSSSSSSSSSSSSSSSSSSSSSSS]
Subtask/Task Score:
{0/100}
Score: 0
User: erng
Problemset: ย่องเบาหลบกับระเบิด
Language: cpp
Time: 0.050 second
Submitted On: 2025-11-22 21:12:13
#include <bits/stdc++.h>
using namespace std;
int n, m, mp[1005][1005], di[8]={1, 1, 0, -1, -1, -1, 0, 1}, dj[8]={0, 1, 1, 1, 0, -1, -1, -1}, vs[105][105], dist[105][10];
queue<pair<int,int>> q;
int ni[4]={0, 1, 0, -1}, nj[4]={-1, 0, 1, 0}, mn=INT_MAX;
int main()
{
cin.tie(NULL)->sync_with_stdio(false);
cin>>n>>m;
for (int i=1; i<=n; i++)
{
for (int j=1; j<=m; j++)
{
cin>>mp[i][j];
}
}
for (int i=1; i<=n; i++)
{
for (int j=1; j<=m; j++)
{
if (!mp[i][j])
{
for (int k=0; k<8; k++)
{
int ci=i+di[k], cj=j+dj[k];
if (mp[ci][cj]==0) continue;
mp[ci][cj]=2;
}
}
}
}
for (int i=1; i<=n; i++)
{
if (mp[i][1]!=1) continue;
// cout<<"push "<<i<<' '<<1<<'\n';
q.push({i, 1});
vs[i][1]=1;
}
while(!q.empty())
{
auto [i, j]=q.front();
q.pop();
// cout<<"i "<<i<<' '<<j<<'\n';
for (int k=0; k<4; k++)
{
int ci=i+ni[k], cj=j+nj[k];
// cout<<"ci "<<ci<<' '<<cj<<' '<<vs[ci][cj]<<' '<<mp[ci][cj]<<'\n';
if (vs[ci][cj]==1 || mp[ci][cj]!=1) continue;
vs[ci][cj]=1;
dist[ci][cj]=dist[i][j]+1;
q.push({ci, cj});
}
}
for (int i=1; i<=n; i++)
{
if (dist[i][m]==0) continue;
mn=min(mn, dist[i][m]);
}
if (mn==INT_MAX) cout<<-1;
else cout<<mn+1;
}