mirror of
https://github.com/wczffl-503/OI-Codes.git
synced 2025-05-11 00:30:27 +08:00
67 lines
1.6 KiB
C++
67 lines
1.6 KiB
C++
#include <bits/stdc++.h>
|
|
#define lo long long
|
|
#define LLM LONG_LONG_MAX
|
|
#define endl "\n"
|
|
|
|
using namespace std;
|
|
/*
|
|
toothless. #17
|
|
@fredcss_dev
|
|
*/
|
|
|
|
const lo INF = 1e9;
|
|
const lo dx[] = {1, 0, -1, 0};
|
|
const lo dy[] = {0, 1, 0, -1};
|
|
|
|
signed main() {
|
|
lo H, W;
|
|
cin >> H >> W;
|
|
vector<string> g(H);
|
|
for (lo i = 0; i < H; ++i) {
|
|
cin >> g[i];
|
|
}
|
|
|
|
lo A, B, C, D;
|
|
cin >> A >> B >> C >> D;
|
|
--A, --B, --C, --D;
|
|
|
|
vector<vector<lo>> dist(H, vector<lo>(W, INF));
|
|
deque<pair<lo, lo>> q;
|
|
dist[A][B] = 0;
|
|
q.epb(A, B);
|
|
|
|
while (!q.empty()) {
|
|
auto [x, y] = q.front();
|
|
q.pop_front();
|
|
if (x == C && y == D) {
|
|
cout << dist[x][y] << '\n';
|
|
return 0;
|
|
}
|
|
|
|
for (lo i = 0; i < 4; ++i) {
|
|
lo nx = x + dx[i];
|
|
lo ny = y + dy[i];
|
|
if (nx < 0 || nx >= H || ny < 0 || ny >= W) continue;
|
|
if (g[nx][ny] == '.') {
|
|
if (dist[nx][ny] > dist[x][y]) {
|
|
dist[nx][ny] = dist[x][y];
|
|
q.epf(nx, ny);
|
|
}
|
|
} else {
|
|
for (lo j = 1; j <= 2; ++j) {
|
|
lo tx = x + j * dx[i];
|
|
lo ty = y + j * dy[i];
|
|
if (tx < 0 || tx >= H || ty < 0 || ty >= W) break;
|
|
if (g[tx][ty] == '.') break;
|
|
if (dist[tx][ty] > dist[x][y] + 1) {
|
|
dist[tx][ty] = dist[x][y] + 1;
|
|
q.epb(tx, ty);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
cout << -1 << '\n';
|
|
return 0;
|
|
} |