水题,直接跑一边网格图BFS即可。

#include<bits/stdc++.h>
using i64 = long long;

int dx[] = {0, 0, -1, 1};
int dy[] = {-1, 1, 0, 0};

int main() {
    std::cin.tie(nullptr)->sync_with_stdio(false);

    int n, m;
    std::cin >> n >> m;

    int sx, sy, ex, ey;
    std::cin >> sx >> sy >> ex >> ey;
    sx--; sy--; ex--; ey--;

    std::vector<std::string> a(n);
    for (auto &s : a) std::cin >> s;

    int inf = 1e9;
    std::vector dis(n, std::vector<int>(m, inf));

    dis[sx][sy] = 0;
    std::queue<std::pair<int, int>> q;
    q.push({sx, sy});
    while (q.size()) {
        auto [x, y] = q.front(); q.pop();

        for (int w = 0; w < 4; w++) {
            int nx = x + dx[w];
            int ny = y + dy[w];

            if (nx >= 0 && ny >= 0 && nx < n && ny < m && a[nx][ny] =='.' && dis[nx][ny] > dis[x][y] + 1) {
                dis[nx][ny] = dis[x][y] + 1;
                q.push({nx, ny});
            }
        }
    }

    std::cout << (dis[ex][ey] == inf ? -1 : dis[ex][ey]);

    return 0;
}

https://www.nowcoder.com/discuss/727521113110073344