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

#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> P;
int INF = 1e16 + 7;
int mod = 998244353;
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};
int dx2[25] = {2, 2, 2, 2, 2, -2, -2, -2, -2, -2, 0,  0, 0,
               0, 0, 1, 1, 1, 1,  1,  -1, -1, -1, -1, -1};
int dy2[25] = {0,  -1, -2, 1,  2, -2, -1, 0, 1, 2, 2,  1, 0,
               -1, -2, -2, -1, 0, 1,  2,  0, 1, 2, -1, -2};
signed main() {
  int H, W;
  cin >> H >> W;
  int a, b, c, d;
  cin >> a >> b >> c >> d;
  vector<vector<char>> S(H + 2, vector<char>(W + 2, '#'));
  for (int i = 1; i <= H; i++) {
    for (int j = 1; j <= W; j++) {
      cin >> S[i][j];
    }
  }
  vector<vector<P>> road(H * H + W * W);
  for (int i = 1; i <= H; i++) {
    for (int j = 1; j <= W; j++) {
      for (int k = 0; k < 4; k++) {
        int nx = i + dx[k];
        int ny = j + dy[k];
        if (nx >= 1 && nx <= H && ny >= 1 && ny <= W) {
          if (S[nx][ny] == '.') {
            road[(i - 1) * H + j].push_back({(nx - 1) * H + ny, 0});
          }
        }
      }
      for (int k = 0; k < 25; k++) {
        int nx = i + dx2[k];
        int ny = j + dy2[k];
        if (nx >= 1 && nx <= H && ny >= 1 && ny <= W) {
          if (S[nx][ny] == '.') {
            road[(i - 1) * H + j].push_back({(nx - 1) * H + ny, 1});
          }
        }
      }
    }
  }
  vector<int> ans(H * H + W * W, INF);
  ans[(a - 1) * H + b] = 0;
  priority_queue<P, vector<P>, greater<P>> que;
  que.push({(a - 1) * H + b, 0});
  while (!que.empty()) {
    P x = que.top();
    que.pop();
    if (ans[x.first] < x.second) {
      continue;
    }
    for (int i = 0; i < road[x.first].size(); i++) {
      if (ans[road[x.first][i].first] > x.second + road[x.first][i].second) {
        ans[road[x.first][i].first] = x.second + road[x.first][i].second;
        que.push({road[x.first][i].first, x.second + road[x.first][i].second});
      }
    }
  }
  if (ans[(c - 1) * H + d] == INF) {
    cout << -1 << endl;
    return 0;
  }
  cout << ans[(c - 1) * H + d] << endl;
}


Error: 0

Fixed submission:

#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> P;
int INF = 1e16 + 7;
int mod = 998244353;
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};
int dx2[10] = {2, 2, 2, 2, 2, -2, -2, -2, -2, -2};
int dy2[10] = {0, -1, -2, 1, 2, -2, -1, 0, 1, 2};
signed main() {
  int H, W;
  cin >> H >> W;
  int a, b, c, d;
  cin >> a >> b >> c >> d;
  vector<vector<char>> S(H + 2, vector<char>(W + 2, '#'));
  for (int i = 1; i <= H; i++) {
    for (int j = 1; j <= W; j++) {
      cin >> S[i][j];
    }
  }
  vector<vector<P>> road(H * W + H + W);
  for (int i = 1; i <= H; i++) {
    for (int j = 1; j <= W; j++) {
      for (int k = 0; k < 4; k++) {
        int nx = i + dx[k];
        int ny = j + dy[k];
        if (nx >= 1 && nx <= H && ny >= 1 && ny <= W) {
          if (S[nx][ny] == '.') {
            road[i * H + j].push_back({nx * H + ny, 0});
          }
        }
      }
      for (int k = 0; k < 10; k++) {
        int nx = i + dx2[k];
        int ny = j + dy2[k];
        if (nx >= 1 && nx <= H && ny >= 1 && ny <= W) {
          if (S[nx][ny] == '.') {
            road[i * H + j].push_back({nx * H + ny, 1});
          }
        }
      }
    }
  }
  vector<int> ans(H * W + H + W, INF);
  ans[a * H + b] = 0;
  priority_queue<P, vector<P>, greater<P>> que;
  que.push({a * H + b, 0});
  while (!que.empty()) {
    P x = que.top();
    que.pop();
    if (ans[x.first] < x.second) {
      continue;
    }
    for (int i = 0; i < road[x.first].size(); i++) {
      if (ans[road[x.first][i].first] > x.second + road[x.first][i].second) {
        ans[road[x.first][i].first] = x.second + road[x.first][i].second;
        que.push({road[x.first][i].first, x.second + road[x.first][i].second});
      }
    }
  }
  if (ans[c * H + d] == INF) {
    cout << -1 << endl;
    return 0;
  }
  cout << ans[c * H + d] << endl;
}