#include #include #include #include using namespace std; // N E S W constexpr array dr = {-1, 0, 1, 0}, dc = { 0, 1, 0,-1}; constexpr int dr_size = dr.size(); bool is_kado(int a, int b, int c) { if(a == 0) { return true; } return a!=c && ((a>b&&bc)); } int main(void) { constexpr int inf = 987654321; int C, R; scanf("%d%d", &C, &R); vector> G(R, vector(C, 0)); for(int r=0; r>>> cost(R, vector>>(C, vector>(10, vector(10, inf)))); // cost[R][C][10][10] cost[0][0][0][G[0][0]] = 0; priority_queue, vector>, greater>> pq; pq.emplace(0, 0, 0, 0, G[0][0]); while(!pq.empty()) { int _, r, c, b2, b1; tie(_, r, c, b2, b1) = pq.top(); pq.pop(); for(int i=0; i cost[r][c][b2][b1] + 1) { cost[nr][nc][b1][G[nr][nc]] = cost[r][c][b2][b1] + 1; pq.emplace(cost[nr][nc][b1][G[nr][nc]], nr, nc, b1, G[nr][nc]); } } } int res = inf; for(int b2=0; b2<10; ++b2) { for(int b1=0; b1<10; ++b1) { res = min(res, cost[R-1][C-1][b2][b1]); } } if(res == inf) { res = -1; } printf("%d\n", res); return 0; }