// #牛客春招刷题训练营# https://www.nowcoder.com/discuss/726480854079250432 // 最短路先想bfs #include <iostream> #include <vector> #include <cmath> #include <queue> #include <array> #define pre(i,j,k) for (int i = j; i < k; i++) #define pi pair<int,int> using namespace std; array<int, 4> dx{0,0,1,-1}, dy{1,-1,0,0}; int main() { ios_base::sync_with_stdio(false); int n, m; cin >> n >> m; vector<vector<char>> a(n, vector<char>(m)); vector<vector<int>> len(n,vector<int>(m, -1)); bool flag = 1; int qx, qy, fx, fy; cin >> qx >> qy >> fx >> fy; len[qx - 1][qy - 1] = 0; if (qx == fx && qy == fy){ cout << 0; return 0; } pre(i,0,n) pre(j,0,m) cin >> a[i][j]; queue<pi> q; q.push(pi(qx - 1, qy - 1));//----------起点入队 while(!q.empty()){//---------如果队列不为空 pi np = q.front(); q.pop(); pre(i,0,4){ int nx = np.first + dx[i], ny = np.second + dy[i]; if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue;//-------各种检测 if (a[nx][ny] == '*') continue; else if (len[nx][ny] != -1) continue; q.push(pi(nx, ny)); len[nx][ny] = len[np.first][np.second] + 1;//---------跟新起点到这个点的最短路 if (nx == fx - 1 && ny == fy - 1){//---------如果找到了终点 flag = 0; break; } } } if (flag) {//--------如果从起点能走到的点都遍历完了还没找到终点 cout << -1; } return 0; } // 64 位输出请用 printf("%lld")