```cpp
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y,step,blood;
};
short n,m,mp[10][10],dx[5]={0,1,-1,0,0},dy[5]={0,0,0,-1,1},vis[10][10];
node s,t;
queue<node> q;
void bfs(){
s.step=0;
s.blood=6;
vis[s.x][s.y]=6;
q.push(s);
while(!q.empty())
{
node tmp=q.front();
q.pop();
if(tmp.blood==1)continue;
for(int i=1;i<=4;i++)
{
node a;
a.x=tmp.x+dx[i];
a.y=tmp.y+dy[i];
if(a.x>=1&&a.x<=n&&a.y>=1&&a.y<=m&&mp[a.x][a.y]!=0)
{
a.step=tmp.step+1;
a.blood=tmp.blood-1;
if(vis[a.x][a.y]>=a.blood)continue;
vis[a.x][a.y]=a.blood;
if(a.x==t.x&&a.y==t.y)
{
cout<<a.step;
return;
}
if(mp[a.x][a.y]==4)a.blood=6;
q.push(a);
}
}
}
cout<<-1;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>mp[i][j];
if(mp[i][j]==2)
{
s.x=i;
s.y=j;
}
else if(mp[i][j]==3)
{
t.x=i;
t.y=j;
}
}
}
bfs();
return 0;
}
```
by zhouxianzhuo @ 2023-11-12 11:20:29