#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int lint; #define rep(i, n) for (lint i = 0; i < n; i++) #define sort(v) sort((v).begin(), (v).end()) #define reverse(v) reverse((v).begin(), (v).end()) #define upper(v,hoge) upper_bound(v.begin(),v.end(),hoge) #define lower(v,hoge) lower_bound(v.begin(),v.end(),hoge) #define mp make_pair #define P pair #define enld endl int main() { const int INF = 1 << 30; const int di[4] = { 0,1,0,-1 }; const int dj[4] = { 1,0,-1,0 }; int h, w; cin >> h >> w; int sy, sx, gy, gx; cin >> sy >> sx >> gy >> gx; vector field(h); for (int i = 0; i < h; i++) { cin >> field[i]; } // BFS vector > d(h, vector(w, INF)); d[sy-1][sx-1] = 1; queue

que; que.push(P(sy-1, sx-1)); while (!que.empty()) { P pos = que.front(); que.pop(); int i = pos.first, j = pos.second; for (int k = 0; k < 4; k++) { int ni = i + di[k], nj = j + dj[k]; if (ni < 0 || ni >= h) continue; if (nj < 0 || nj >= w) continue; if (field[ni][nj] == '#') continue; if (d[ni][nj] > d[i][j] + 1) { d[ni][nj] = d[i][j] + 1; que.push(P(ni, nj)); } } } if (d[gy - 1][gx - 1] == INF) { cout << -1 << endl; } else { cout << d[gy - 1][gx - 1]-1 << endl; } }