int solve(){ memset(tick, 0x1f, sizeof(tick)); Pos start = findCh('S'); Pos target = findCh('T'); //start.display("S"); //start.display("T"); queue<Pos> Q; Q.push(start); tick[start.x][start.y][start.color][start.dir] = 0; while (Q.size()){ Pos s = Q.front(); Q.pop(); //s.display("Pop"); for (int i = 0; i < 3; i++){ Pos t = s.action(i); if (!t.isValid()) continue; if (tick[t.x][t.y][t.color][t.dir] != INF) continue; if (grid[t.x][t.y] == '#') continue; tick[t.x][t.y][t.color][t.dir] = tick[s.x][s.y][s.color][s.dir] + 1; Q.push(t); //s.display(" Push"); } } int best = INF; for (int i = 0; i < 4; i++){ target.dir = i; best = min(best, tick[target.x][target.y][target.color][target.dir]); } return best; }