很抱歉我的注释少了
#include<bits/stdc++.h>
using namespace std;
int maps[9][9]={0};
struct NODE{
int x,y,k,hp;
}now,sum;
int zl[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
queue<NODE> q;
int visit[9][9]={0};
int main(){
int n,m;
int sx,sy;
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>maps[i][j];
if (maps[i][j]==2){
sx=i;
sy=j;
}
}
}
//读入数据和开始点;
q.push((NODE){sx,sy,0,6});
visit[sx][sy]=6;
bool unfinished = true;
while(unfinished&&(!q.empty())){
now=q.front();
q.pop();
for(int i=0;i<4&&unfinished;i++){
if(maps[now.x+zl[i][0]][now.y+zl[0][i]]&&visit[now.x+zl[i][0]][now.y+zl[0][i]]<now.hp-1){
sum.x=now.x+zl[i][0];
sum.y=now.y+zl[0][i];
sum.k=now.k+1;
sum.hp=maps[sum.x][sum.y]==4?6:now.hp-1;
visit[sum.x][sum.y]=sum.hp;
if(maps[sum.x][sum.y]==3)unfinished=false;
q.push(sum);
}
}
}
if(unfinished)cout<<-1<<endl;
else cout<<sum.k;
}