P2802
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[11][11];
int dx[]={0,1,0,-1};
int dy[]={-1,0,1,0};
struct node{
int x,y,xue,step;
}qu[90];
int BFs(int x0,int y0){
qu[0].x=x0;
qu[0].y=y0;
qu[0].xue=6;
qu[0].step=0;
a[x0][y0]=0;
int head=0,tail=1;
while(head<tail){
int x=qu[head].x;
int y=qu[head].y;
int X=qu[head].xue;
int s=qu[head++].step;
for(int i=0; i<4; i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(nx>0 && nx<=n && ny>0 && ny<=m)
{
if(a[nx][ny]==1 || a[nx][ny]==3 || a[nx][ny]==4)
{
if(a[nx][ny]==3 && X>1)
return s+1;
if(a[nx][ny]==3 && X<=1)
return -1;
if(a[nx][ny]==4)
X=6;
qu[tail].step=s+1;
qu[tail].xue=X-1;
qu[tail].x=nx;
qu[tail++].y=ny;
a[nx][ny]=0;
}
}
}
}
return -1;
}
int main(){
int x=0,y=0;
cin>>n>>m;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
{
cin>>a[i][j];
if(a[i][j]==2)
{
x=i;
y=j;
}
}
cout<<BFs(x,y);
return 0;
}