Problem p02579 (C++) — buggy submission, verdict: Runtime Error

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define n_l '\\n'

#ifndef ONLINE_JUDGE
#define dbg(...)                                                               \\
  cout << "[" << #__VA_ARGS__ << "]: ";                                        \\
  cout << to_string(__VA_ARGS__) << endl
template <typename T, size_t N> int SIZE(const T (&t)[N]) { return N; }
template <typename T> int SIZE(const T &t) { return t.size(); }
string to_string(const string s, int x1 = 0, int x2 = 1e9) {
  return '"' + ((x1 < s.size()) ? s.substr(x1, x2 - x1 + 1) : "") + '"';
}
string to_string(const char *s) { return to_string((string)s); }
string to_string(const bool b) { return (b ? "true" : "false"); }
string to_string(const char c) { return string({c}); }
template <size_t N>
string to_string(const bitset<N> &b, int x1 = 0, int x2 = 1e9) {
  string t = "";
  for (int __iii__ = min(x1, SIZE(b)), __jjj__ = min(x2, SIZE(b) - 1);
       __iii__ <= __jjj__; ++__iii__) {
    t += b[__iii__] + '0';
  }
  return '"' + t + '"';
}
template <typename A, typename... C>
string to_string(const A(&v), int x1 = 0, int x2 = 1e9, C... coords);
int l_v_l_v_l = 0, t_a_b_s = 0;
template <typename A, typename B> string to_string(const pair<A, B> &p) {
  l_v_l_v_l++;
  string res = "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
  l_v_l_v_l--;
  return res;
}
template <typename A, typename... C>
string to_string(const A(&v), int x1, int x2, C... coords) {
  int rnk = rank<A>::value;
  string tab(t_a_b_s, ' ');
  string res = "";
  bool first = true;
  if (l_v_l_v_l == 0)
    res += n_l;
  res += tab + "[";
  x1 = min(x1, SIZE(v)), x2 = min(x2, SIZE(v));
  auto l = begin(v);
  advance(l, x1);
  auto r = l;
  advance(r, (x2 - x1) + (x2 < SIZE(v)));
  for (auto e = l; e != r; e = next(e)) {
    if (!first) {
      res += ", ";
    }
    first = false;
    l_v_l_v_l++;
    if (e != l) {
      if (rnk > 1) {
        res += n_l;
        t_a_b_s = l_v_l_v_l;
      };
    } else {
      t_a_b_s = 0;
    }
    res += to_string(*e, coords...);
    l_v_l_v_l--;
  }
  res += "]";
  if (l_v_l_v_l == 0)
    res += n_l;
  return res;
}
void dbgm() { ; }
template <typename Heads, typename... Tails> void dbgm(Heads H, Tails... T) {
  cout << to_string(H) << " | ";
  dbgm(T...);
}
#define dbgm(...)                                                              \\
  cout << "[" << #__VA_ARGS__ << "]: ";                                        \\
  dbgm(__VA_ARGS__);                                                           \\
  cout << endl
#endif

#define pb push_back
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second
#define sz(x) ((int)(x).size())
#define forn(i, n) for (int i = 0; i < n; i++)
#define for1(i, n) for (int i = 1; i <= n; i++)
typedef vector<int> vi;
typedef vector<ll> vl;
typedef pair<int, int> pii;
typedef double db;
typedef vector<vi> vvi;
const ll mod = 1000000007;
const ll N = 1005; // check this
int dx[] = {-1, 0, 1, 0, 1, 1, -1, -1};
int dy[] = {0, -1, 0, 1, 1, -1, 1, -1};

ll powmod(ll a, ll b) {
  ll res = 1;
  a %= mod;
  assert(b >= 0);
  for (; b; b >>= 1) {
    if (b & 1)
      res = res * a % mod;
    a = a * a % mod;
  }
  return res;
}
ll powb(ll a, ll b) {
  ll res = 1;
  a;
  assert(b >= 0);
  for (; b; b >>= 1) {
    if (b & 1)
      res = res * a;
    a = a * a;
  }
  return res;
}
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }

int n, m, sx, sy, tx, ty;
char a[N][N];
int dis[N][N];
bool valid(int x, int y) {
  if (x < 0 || y < 0 || x >= n || y >= m || a[x][y] == '#')
    return false;
  return true;
}

int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);

#ifndef ONLINE_JUDGE
  freopen("inputf.in", "r", stdin);
  freopen("outputf.in", "w", stdout);
#endif

  cin >> n >> m;
  cin >> sx >> sy;
  cin >> tx >> ty;
  sx--, sy--, tx--, ty--;
  forn(i, n) forn(j, m) cin >> a[i][j];
  forn(i, n) forn(j, m) dis[i][j] = 1e8;
  deque<array<int, 2>> dq;
  dq.push_front({sx, sy});
  dis[sx][sy] = 0;
  while (!dq.empty()) {
    int x = (dq.front())[0], y = dq.front()[1];
    dq.pop_front();
    for (int d = 0; d < 4; d++) {
      int xx = x + dx[d], yy = y + dy[d];
      if (!valid(xx, yy))
        continue;
      if (dis[x][y] < dis[xx][yy]) {
        dis[xx][yy] = dis[x][y];
        dq.push_front({xx, yy});
      }
    }
    for (int i = x - 2; i <= x + 2; i++) {
      for (int j = y - 2; j <= y + 2; j++) {
        if (!valid(i, j))
          continue;
        if (dis[i][j] > dis[x][y] + 1) {
          dis[i][j] = dis[x][y] + 1;
          dq.push_back({i, j});
        }
      }
    }
  }
  if (dis[tx][ty] > 1e7)
    cout << "-1";
  else
    cout << dis[tx][ty];
}


Error: WA

Fixed submission:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define n_l '\\n'

#ifndef ONLINE_JUDGE
#define dbg(...)                                                               \\
  cout << "[" << #__VA_ARGS__ << "]: ";                                        \\
  cout << to_string(__VA_ARGS__) << endl
template <typename T, size_t N> int SIZE(const T (&t)[N]) { return N; }
template <typename T> int SIZE(const T &t) { return t.size(); }
string to_string(const string s, int x1 = 0, int x2 = 1e9) {
  return '"' + ((x1 < s.size()) ? s.substr(x1, x2 - x1 + 1) : "") + '"';
}
string to_string(const char *s) { return to_string((string)s); }
string to_string(const bool b) { return (b ? "true" : "false"); }
string to_string(const char c) { return string({c}); }
template <size_t N>
string to_string(const bitset<N> &b, int x1 = 0, int x2 = 1e9) {
  string t = "";
  for (int __iii__ = min(x1, SIZE(b)), __jjj__ = min(x2, SIZE(b) - 1);
       __iii__ <= __jjj__; ++__iii__) {
    t += b[__iii__] + '0';
  }
  return '"' + t + '"';
}
template <typename A, typename... C>
string to_string(const A(&v), int x1 = 0, int x2 = 1e9, C... coords);
int l_v_l_v_l = 0, t_a_b_s = 0;
template <typename A, typename B> string to_string(const pair<A, B> &p) {
  l_v_l_v_l++;
  string res = "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
  l_v_l_v_l--;
  return res;
}
template <typename A, typename... C>
string to_string(const A(&v), int x1, int x2, C... coords) {
  int rnk = rank<A>::value;
  string tab(t_a_b_s, ' ');
  string res = "";
  bool first = true;
  if (l_v_l_v_l == 0)
    res += n_l;
  res += tab + "[";
  x1 = min(x1, SIZE(v)), x2 = min(x2, SIZE(v));
  auto l = begin(v);
  advance(l, x1);
  auto r = l;
  advance(r, (x2 - x1) + (x2 < SIZE(v)));
  for (auto e = l; e != r; e = next(e)) {
    if (!first) {
      res += ", ";
    }
    first = false;
    l_v_l_v_l++;
    if (e != l) {
      if (rnk > 1) {
        res += n_l;
        t_a_b_s = l_v_l_v_l;
      };
    } else {
      t_a_b_s = 0;
    }
    res += to_string(*e, coords...);
    l_v_l_v_l--;
  }
  res += "]";
  if (l_v_l_v_l == 0)
    res += n_l;
  return res;
}
void dbgm() { ; }
template <typename Heads, typename... Tails> void dbgm(Heads H, Tails... T) {
  cout << to_string(H) << " | ";
  dbgm(T...);
}
#define dbgm(...)                                                              \\
  cout << "[" << #__VA_ARGS__ << "]: ";                                        \\
  dbgm(__VA_ARGS__);                                                           \\
  cout << endl
#endif

#define pb push_back
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second
#define sz(x) ((int)(x).size())
#define forn(i, n) for (int i = 0; i < n; i++)
#define for1(i, n) for (int i = 1; i <= n; i++)
typedef vector<int> vi;
typedef vector<ll> vl;
typedef pair<int, int> pii;
typedef double db;
typedef vector<vi> vvi;
const ll mod = 1000000007;
const ll N = 200005; // check this
int dx[] = {-1, 0, 1, 0, 1, 1, -1, -1};
int dy[] = {0, -1, 0, 1, 1, -1, 1, -1};

ll powmod(ll a, ll b) {
  ll res = 1;
  a %= mod;
  assert(b >= 0);
  for (; b; b >>= 1) {
    if (b & 1)
      res = res * a % mod;
    a = a * a % mod;
  }
  return res;
}
ll powb(ll a, ll b) {
  ll res = 1;
  a;
  assert(b >= 0);
  for (; b; b >>= 1) {
    if (b & 1)
      res = res * a;
    a = a * a;
  }
  return res;
}
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }

char a[1002][1002];
int n, m, sx, sy, tx, ty;
int vis[1002][1002];
int comp[1002][1002];
int cc = 0;
int source, target;
void dfs(int x, int y) {
  vis[x][y] = 1;
  comp[x][y] = cc;
  if (x == sx && y == sy)
    source = cc;
  if (x == tx && y == ty)
    target = cc;
  forn(k, 4) {
    int xx = x + dx[k], yy = y + dy[k];
    if (xx >= 0 && xx < n && yy >= 0 && yy < m && !vis[xx][yy] &&
        a[xx][yy] == '.')
      dfs(xx, yy);
  }
}

set<int> g[1002];
int dis[1002];
int visc[1002];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);

#ifndef ONLINE_JUDGE
  freopen("inputf.in", "r", stdin);
  freopen("outputf.in", "w", stdout);
#endif

  cin >> n >> m;
  cin >> sx >> sy >> tx >> ty;
  sx--, sy--, tx--, ty--;
  forn(i, n) forn(j, m) cin >> a[i][j];
  forn(i, n) {
    forn(j, m) {
      if (a[i][j] == '.' && !vis[i][j]) {
        cc++;
        dfs(i, j);
      }
    }
  }
  forn(i, n) {
    forn(j, m) {
      if (a[i][j] == '.') {
        for1(l, 2) {
          forn(k, 8) {
            int x = i + l * dx[k], y = j + l * dy[k];
            if (x >= 0 && x < n && y >= 0 && y < m && a[x][y] == '.' &&
                comp[x][y] != comp[i][j]) {
              g[comp[i][j]].insert(comp[x][y]);
              g[comp[x][y]].insert(comp[i][j]);
            }
          }
        }
      }
    }
  }
  // dbg(g);
  queue<int> q;
  dis[source] = 0;
  q.push(source);
  visc[source] = 1;
  bool ok = false;
  while (!q.empty()) {
    int v = q.front();
    q.pop();
    // if()
    int d = dis[v];
    for (auto i : g[v]) {
      if (visc[i])
        continue;
      dis[i] = d + 1;
      visc[i] = 1;
      q.push(i);
    }
  }
  // forn(i,cc)dbg(g[i]);
  // dbg(g[1]);
  // dbg(g[2]);
  // cout<<cc<<" "<<source<<" "<<target<<"\\n";
  // forn(i,cc)cout<<dis[i]<<" ";
  if (!visc[target])
    cout << "-1";
  else
    cout << dis[target];
}