#include <bits/stdc++.h>
using namespace std;
struct Node {
int pos, len, dir;
};
int n, m, s, e;
vector<char> grid;
int dx[] = {0, 0, 1, -1}, dy[] = {1, -1, 0, 0};
int dis[200005][4][4];
queue<Node> q;
int to(int i, int j) { return (i - 1) * m + j; }
int bfs() {
for (int d = 0; d < 4; ++d) {
q.push({s, 1, d});
dis[s][1][d] = 0;
}
while (!q.empty()) {
Node u = q.front(); q.pop();
if (u.pos == e) return dis[e][u.len][u.dir];
for (int i = 0; i < 4; ++i) {
Node v = u;
v.pos += dx[i] * m + dy[i];
v.len = (u.dir == i) ? u.len + 1 : 1;
v.dir = i;
if (v.pos < 1 || v.pos > n * m || v.len > 3) continue;
if (dis[v.pos][v.len][v.dir] != 0x3f3f3f3f) continue;
if (grid[v.pos] == '#') continue;
dis[v.pos][v.len][v.dir] = dis[u.pos][u.len][u.dir] + 1;
q.push(v);
}
}
return -1;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
memset(dis, 0x3f, sizeof dis);
cin >> n >> m;
grid.resize(n * m + 1);
for (int i = 1; i <= n * m; ++i) {
cin >> grid[i];
if (grid[i] == 'S') s = i;
if (grid[i] == 'T') e = i;
}
cout << bfs();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |