代码如下
#include<bits/stdc++.h>
using namespace std;
int s[15][15];
int vis[15][15];
int r,c,r2,c2,ans=100110;
int n,m;
int d[4][2]= {{-1,0},{1,0},{0,-1},{0,1}};
void dfs(int x,int y,int hp,int t) {
//cout<<x<<" "<<y<<" "<<hp<<" "<<t<<endl;
if(x==r&&y==c&&hp>1) {
ans=min(ans,t);
return;
}
if(hp==0||t>n*m||t>ans){
return;
}
if(s[x][y]==4){
hp=6;
}
int xx,yy;
for(int i=0; i<4; i++) {
xx=x+d[i][0];
yy=y+d[i][1];
if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&hp>1&&s[xx][yy]!=0&&vis[xx][yy]==0) {
vis[xx][yy]=1;
dfs(xx,yy,hp-1,t+1);
vis[xx][yy]=0;
}
}
}
int main() {
cin>>n>>m;
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++) {
cin>>s[i][j];
}
}
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++) {
if(s[i][j]==3) {
r=i;
c=j;
//cout<<i<<" "<<j<<endl;
}
if(s[i][j]==2) {
r2=i;
c2=j;
//cout<<i<<" "<<j<<endl;
}
}
}
dfs(r2,c2,6,0);
if(ans==100110){
cout<<"-1"<<endl;
return 0;
}
cout<<ans<<endl;
return 0;
}