https://www.nowcoder.com/practice/e88b41dc6e764b2893bc4221777ffe64?tpId=308&tqId=40477&ru=/exam/oj
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int m, n, x1, y1, x2, y2;
vector<vector<int>> dist; // 用来标记走了多少步数
vector<vector<char>> bords; //
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};
int bfs() {
queue<pair<int, int>> q;
q.push({x1, y1});
dist[x1][y1] = 0;
while (q.size()) {
auto[a, b] = q.front();
q.pop();
for (int i = 0; i < 4; ++i) {
int x = a + dx[i], y = b + dy[i];
if (x >= 0 && x < m && y >= 0 && y < n
&& bords[x][y] == '.' && dist[x][y] == -1) {
q.push({x, y});
dist[x][y] = dist[a][b] + 1;
if (x == x2 && y == y2) return dist[x2][y2];
}
}
}
return -1;
}
int main() {
cin >> m >> n >> x1 >> y1 >> x2 >> y2;
--x1;
--y1;
--x2;
--y2;
dist.assign(m, vector<int>(n, -1));
bords.assign(m, vector<char>(n, 0));
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
cin >> bords[i][j];
}
}
cout << bfs() << endl;
return 0;
}
// 64 位输出请用 printf("%lld")