Pagini recente » Cod sursa (job #3306653) | Cod sursa (job #649184) | Cod sursa (job #1630462) | Cod sursa (job #1695944) | Cod sursa (job #3312117)
//#pragma GCC optimize("O3, Ofast, unroll-loops")
#include <bits/stdc++.h>
using namespace std;
int mat[505][505];
int mat2[505][505];
int mat3[505][505];
int d1[]={-1, -1, 0, 1, 1, 1, 0, -1};
int d2[]={0, 1, 1, 1, 0, -1, -1, -1};
struct stare
{
int fi, se, dir;
};
signed main()
{
ifstream cin("car.in");
ofstream cout("car.out");
int n, m, a1, a2, b1, b2, in, sf, mincnt=1000000;
cin>>n>>m;
cin>>a1>>b1>>a2>>b2;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
cin>>mat[i][j];
}
queue<stare> q[n*m*4];
q[0].push({a1, b1, 2});
for(int i=0; i<n*m*4; i++)
{
while(!q[i].empty())
{
int x=q[i].front().fi, y=q[i].front().se, z=q[i].front().dir;
q[i].pop();
if(x==a2 && y==b2)
{
if(mincnt>i)
mincnt=i;
}
for(int j=-2;j<=2;j++)
{
int xx=z+j;
if(xx<0)
xx+=8;
else if(xx>7)
xx-=8;
if(x+d1[xx]>0 && x+d1[xx]<=n && y+d2[xx]>0 && y+d2[xx]<=m && mat[x+d1[xx]][y+d2[xx]]==0)
{
q[i+max(j, (-1)*j)].push({x+d1[xx], y+d2[xx], xx});
}
}
}
}
cout<<mincnt-1;
return 0;
}