#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
struct coord {
int x, y, b;
};
int walk[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
queue<coord> Q;
int main () {
int n, m;
int ans[10][10], rec[10][10], visit[10][10];
memset(ans, -1, sizeof(ans));
memset(visit, -1, sizeof(ans));
cin >> n >> m;
coord tmp;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++) {
int k;
cin >> k;
if (k == 2)
tmp = {i, j, 6};
rec[i][j] = k;
}
ans[1][1] = 0;
Q.push(tmp);
while (!Q.empty()) {
coord u = Q.front();
Q.pop();
int ux = u.x, uy = u.y, ub = u.b;
for (int i = 0; i < 4; i++) {
int x = ux + walk[i][0];
int y = uy + walk[i][1];
if (x >= 1 && x <= n && y >= 1 && y <= m && rec[x][y] != 0 && visit[x][y] < ub - 1) {
ans[x][y] = ans[ux][uy] + 1;
ub--;
visit[x][y] = ub;
if (rec[x][y] == 4)
ub = 6;
if (ub == 1) continue;
if (rec[x][y] == 3) {
cout << ans[x][y] << endl;
return 0;
}
tmp = {x, y, ub};
Q.push(tmp);
}
}
}
cout << -1 << endl;
return 0;
}
帮看,谢谢!