P2802
#include <bits/stdc++.h>
using namespace std;
int n,m,nmap[14][14],sx,sy,ans = 1e9,dx[4] = {0,1,0,-1},dy[4] = {1,0,-1,0};
bool vis[14][14][7];
void dfs(int x,int y,int h,int t)
{
if (h <= 0)
{
return ;
}
vis[x][y][h] = 1;
if (nmap[x][y] == 3)
{
ans = min(ans,t);
vis[x][y][h] = 0;
return ;
}
if (nmap[x][y] == 4)
{
h = 6;
}
for (int i = 0;i < 4;i++)
{
int gx = x + dx[i],gy = y + dy[i];
if (gx > 0 && gx <= n && gy > 0 && gy <= m && !vis[gx][gy][h - 1] && nmap[gx][gy])
{
dfs(gx,gy,h - 1,t + 1);
}
}
vis[x][y][h] = 0;
}
int main()
{
cin >> n >> m;
for (int i = 1;i <= n;i++)
{
for (int j = 1;j <= m;j++)
{
cin >> nmap[i][j];
if (nmap[i][j] == 2)
{
sx = i;
sy = j;
}
}
}
dfs(sx,sy,6,0);
cout << (ans == 1e9?-1:ans);
return 0;
}