#include <bits/stdc++.h>
using namespace std;
int a[505][505],n,m,ans = 999999;
bool vis[505][505];
void dfs(int x,int y,int sum,int mouse) {
if(mouse==0 || a[x][y]==0 || vis[x][y]==0) return;
if(x<1 || x>n || y<1 || y>m) return;
if(sum > ans) return;
if(a[x][y] == 3) {
ans = min(ans,sum);
return;
}
int mouse1 = mouse-1;
if (a[x][y] == 4) mouse1 = 5;
vis[x][y] = false;
dfs(x-1,y,sum+1,mouse1);
dfs(x+1,y,sum+1,mouse1);
dfs(x,y-1,sum+1,mouse1);
dfs(x,y+1,sum+1,mouse1);
vis[x][y] = true;
}
int main() {
scanf("%d%d",&n,&m);
int x,y;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
{
scanf("%d",&a[i][j]);
if (a[i][j] == 2)
{
x=i;
y=j;
}
}
dfs(x,y,0,6);
if (ans == 999999) printf("-1");
else printf("%d",ans);
}
自己debug没看出来呀……