#include<iostream>
#include<queue>
using namespace std;
struct node{
int x=0,y=0,hp=0;
};
int n,m,a[10][10];
int vis[10][10];
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
int zx,zy;
queue<node>q;
node be;
void bfs(){
q.push(be);
while(!q.empty()){
node tmp=q.front();
if(tmp.x==zx&&tmp.y==zy){
printf("%d",vis[tmp.x][tmp.y]);
return ;
}
if(a[tmp.x][tmp.y]==4)tmp.hp=6;
for(int i=0;i<4;i++){
node kk=tmp;
kk.x+=dx[i];
kk.y+=dy[i];
kk.hp--;
if(kk.x<=n && kk.x>0 && kk.y<=m && kk.y>0 && !vis[kk.x][kk.y] && a[kk.x][kk.y] && kk.hp){
vis[kk.x][kk.y]=vis[tmp.x][tmp.y]+1;
q.push(kk);
}
}
}
puts("-1");
}
int main(){
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)be.x=i,be.y=j,be.hp=6;
if(a[i][j]==3)zx=i,zy=j;
}
bfs();
}
死循环了