代码如下:
#include<bits/stdc++.h>
#define int long long
using namespace std;
long long n,m,a[15][15],ans=1e9,x,y;
int fx[]={0,1,0,-1,0},fy[]={0,0,1,0,-1};
int vis[15][15];
struct Pos{
int x,y,hp,step;
};
void bfs(){
queue<Pos>q;
q.push({x,y,6,0});
while(!q.empty()){
int X=q.front().x,Y=q.front().y,Hp=q.front().hp,Step=q.front().step;
q.pop();
if(a[X][Y]==4)Hp=6;
if(a[X][Y]==3){
cout<<Step;
exit(0);
}
for(int i=1;i<=4;i++){
int nx=X+fx[i],ny=Y+fy[i];
if(nx>0&&nx<=n&&ny>0&&ny<=m&&a[nx][ny]!=0&&!vis[nx][ny]&&Hp>1){
q.push({nx,ny,Hp-1,Step+1});
vis[nx][ny]=true;
}
}
}
}
signed main(){
ios::sync_with_stdio(false);
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;
}
bfs();
cout<<-1;
return 0;
}