Language: C++

/**
*    author:  Dooloper
*    created: 16.09.2020 23:48:27
**/

#pragma region Macros
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
using P = pair<int,int>;
using ll = long long;

#define rep(i,n) for(int i = 0; i < (n); i++)
#define repn(i,n) for(int i = 1; i <= (n); i++)
#define pb push_back
void debug_out() { cout << endl; }
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cout << H << " ";
  debug_out(T...);
}
#ifdef LOCAL
#define debug(...) debug_out(__VA_ARGS__)
#else
#define debug(...)
#endif

const double PI = acos(-1);
const int mod = 1000000007;
class mint {
   long long x;
public:
   mint(long long x=0) : x((x%mod+mod)%mod) {}
   mint operator-() const {
     return mint(-x);
   }
   mint& operator+=(const mint& a) {
       if ((x += a.x) >= mod) x -= mod;
       return *this;
   }
   mint& operator-=(const mint& a) {
       if ((x += mod-a.x) >= mod) x -= mod;
       return *this;
   }
   mint& operator*=(const  mint& a) {
       (x *= a.x) %= mod;
       return *this;
   }
   mint operator+(const mint& a) const {
       mint res(*this);
       return res+=a;
   }
   mint operator-(const mint& a) const {
       mint res(*this);
       return res-=a;
   }
   mint operator*(const mint& a) const {
       mint res(*this);
       return res*=a;
   }
   mint pow(ll t) const {
       if (!t) return 1;
       mint a = pow(t>>1);
       a *= a;
       return a;
   }
   // for prime mod
   mint inv() const {
       return pow(mod-2);
   }
   mint& operator/=(const mint& a) {
       return (*this) *= a.inv();
   }
   mint operator/(const mint& a) const {
       mint res(*this);
       return res/=a;
   }

   friend ostream& operator<<(ostream& os, const mint& m){
       os << m.x;
       return os;
   }
};
#pragma endregion

int h, w;
char maze[105][105];
int used[105][105];

const int di[] = {-1,0,1,0};
const int dj[] = {0,-1,0,1};

int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(false);
  cin >> h >> w;
  int sh,sw,gh,gw;
  cin >> sh >> sw >> gh >> gw;
  sh--;sw--;gh--;gw--;
  rep(i,h)rep(j,w) cin >> maze[i][j];
  const int INF = 1e9;
  vector<vector<int>> dist(h,vector<int>(w,INF));
  deque<P> q;
  dist[sh][sw] = 0;
  q.emplace_back(sh,sw);
  while(!q.empty()){
    int i = q.front().first;
    int j = q.front().second;
    int d = dist[i][j];
    q.pop_front();
    if(dist[i][j] != d) continue;
    rep(v,4){
      int ni = i+di[v], nj = j+dj[v];
      if(ni < 0 || ni >= h || nj < 0 || nj >= w) continue;
      if(maze[ni][nj] == '#') continue;
      if(dist[ni][nj] <= d) continue;
      dist[ni][nj] = d;
      q.emplace_front(ni,nj);
    }
    for(int ei = -2; ei <= 2; ei++){
      for(int ej = -2; ej <= 2; ej++){
        int ni = i+ei, nj = j+ej;
        if(ni < 0 || ni >= h || nj < 0 || nj >= w) continue;
        if(maze[ni][nj] == '#') continue;
        if(dist[ni][nj] <= d+1) continue;
        dist[ni][nj] = d+1;
        q.emplace_back(ni,nj);
      }
    }
  }
  int ans = dist[ti][tj];
  if (ans == INF) ans = -1;
  cout << ans << endl;
  return 0;
}

Compiler output:
a.cc: In function 'int main()':
a.cc:131:18: error: 'ti' was not declared in this scope; did you mean 'tm'?
  131 |   int ans = dist[ti][tj];
      |                  ^~
      |                  tm
a.cc:131:22: error: 'tj' was not declared in this scope; did you mean 'tm'?
  131 |   int ans = dist[ti][tj];
      |                      ^~
      |                      tm