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

#include <bits/stdc++.h>
#define ll long long int
#define ld long double
#define f first
#define s second
#define pb push_back
#define eb emplace_back
#define mk make_pair
#define mt make_tuple
#define MOD 1000000007
#define fo(i, a, b) for (i = a; i < b; i++)
#define foe(i, a, b) for (i = a; i <= b; i++)
#define all(x) x.begin(), x.end()
#define vi vector<int>
#define vl vector<long long int>
#define pii pair<int, int>
#define pll pair<long long int, long long int>
#define vpii vector<pair<int, int>>
#define vpll vector<pair<long long int, long long int>>
#define boost                                                                  \\
  ios::sync_with_stdio(false);                                                 \\
  cin.tie(0)
using namespace std;
const int inf = 1e9 + 5;
const ll inf64 = 1e18 + 5;

const int MAX = 1e3 + 5;
int id[MAX][MAX];
char arr[MAX][MAX];
bool vis[MAX][MAX];

int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};
void flood(int x, int y, int n, int m, int cnt) {
  if (x <= 0 || y <= 0 || x > n || y > m || arr[x][y] == '#' || vis[x][y])
    return;
  vis[x][y] = 1;
  id[x][y] = cnt;

  for (int i = 0; i < 4; i++)
    flood(x + dx[i], y + dy[i], n, m, cnt);
}
int main() {
  boost;
  int n, m, i, j, i1, j1;
  cin >> n >> m;

  int ch, cw;
  cin >> ch >> cw;

  int dh, dw;
  cin >> dh >> dw;

  foe(i, 1, n) { foe(j, 1, m) cin >> arr[i][j]; }

  int cnt = 0;
  foe(i, 1, n) {
    foe(j, 1, m) {
      if (arr[i][j] == '#' || vis[i][j])
        continue;
      ++cnt;
      flood(i, j, n, m, cnt);
    }
  }

  vector<int> adj[cnt + 1];
  foe(i, 1, n) {
    foe(j, 1, m) {
      if (arr[i][j] == '#')
        continue;

      foe(i1, max(1, i - 2), min(n, i + 2)) {
        foe(j1, max(1, j - 2), min(m, j + 2)) {
          if (arr[i1][j1] == '#' || id[i1][j1] == id[i][j])
            continue;
          int x = id[i][j], y = id[i1][j1];
          adj[x].pb(y);
          adj[y].pb(x);
        }
      }
    }
  }

  int st = id[ch][cw], en = id[dh][dw];
  bool vs[cnt + 1];
  int dist[cnt + 1];
  fill(dist, dist + cnt + 1, inf);
  memset(vs, 0, sizeof vs);

  queue<int> q;
  dist[st] = 0;
  q.push(st);
  vs[st] = 1;

  while (!q.empty()) {
    int p = q.front();
    q.pop();

    for (int v : adj[p]) {
      if (!vs[v]) {
        vs[v] = 1;
        dist[v] = dist[p] + 1;
        q.push(v);
      }
    }
  }
  cout << (dist[en] == inf ? -1 : dist[en]);
}

Error: WA

Fixed submission:

#include <bits/stdc++.h>
#define ll long long int
#define ld long double
#define f first
#define s second
#define pb push_back
#define eb emplace_back
#define mk make_pair
#define mt make_tuple
#define MOD 1000000007
#define fo(i, a, b) for (i = a; i < b; i++)
#define foe(i, a, b) for (i = a; i <= b; i++)
#define all(x) x.begin(), x.end()
#define vi vector<int>
#define vl vector<long long int>
#define pii pair<int, int>
#define pll pair<long long int, long long int>
#define vpii vector<pair<int, int>>
#define vpll vector<pair<long long int, long long int>>
#define boost                                                                  \\
  ios::sync_with_stdio(false);                                                 \\
  cin.tie(0)
using namespace std;
const int inf = 1e9 + 5;
const ll inf64 = 1e18 + 5;

const int MAX = 1e3 + 5;
int id[MAX][MAX];
char arr[MAX][MAX];
bool vis[MAX][MAX];
vector<int> adj[MAX];

int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};
void flood(int x, int y, int n, int m, int cnt) {
  if (x <= 0 || y <= 0 || x > n || y > m || arr[x][y] == '#' || vis[x][y])
    return;
  vis[x][y] = 1;
  id[x][y] = cnt;

  for (int i = 0; i < 4; i++)
    flood(x + dx[i], y + dy[i], n, m, cnt);
}
int main() {
  boost;
  int n, m, i, j, i1, j1;
  cin >> n >> m;

  int ch, cw;
  cin >> ch >> cw;

  int dh, dw;
  cin >> dh >> dw;

  foe(i, 1, n) { foe(j, 1, m) cin >> arr[i][j]; }

  int cnt = 0;
  foe(i, 1, n) {
    foe(j, 1, m) {
      if (arr[i][j] == '#' || vis[i][j])
        continue;
      ++cnt;
      flood(i, j, n, m, cnt);
    }
  }
  foe(i, 1, n) {
    foe(j, 1, m) {
      if (arr[i][j] == '#')
        continue;

      foe(i1, max(1, i - 2), min(n, i + 2)) {
        foe(j1, max(1, j - 2), min(m, j + 2)) {
          if (arr[i1][j1] == '#' || id[i1][j1] == id[i][j])
            continue;
          int x = id[i][j], y = id[i1][j1];
          adj[x].pb(y);
          adj[y].pb(x);
        }
      }
    }
  }

  int st = id[ch][cw], en = id[dh][dw];
  bool vs[cnt + 1];
  int dist[cnt + 1];
  fill(dist, dist + cnt + 1, inf);
  memset(vs, 0, sizeof vs);

  queue<int> q;
  dist[st] = 0;
  q.push(st);
  vs[st] = 1;

  while (!q.empty()) {
    int p = q.front();
    q.pop();

    for (int v : adj[p]) {
      if (!vs[v]) {
        vs[v] = 1;
        dist[v] = dist[p] + 1;
        q.push(v);
      }
    }
  }
  cout << (dist[en] == inf ? -1 : dist[en]);
}