Problem p02644 (C++)

Buggy submission (status: Runtime Error):
#include <climits>
#include <iostream>
#include <queue>
#include <string>
#include <vector>
#define ll long long int
#define oo 1000000000000000000
#define forr(i, n) for (ll i = 0; i < n; i++)
#define fastio                                                                 \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(0);                                                                  \
  cout.tie(0);
#define all(x) x.begin(), x.end()
#define eb emplace_back
#define pb push_back

using namespace std;

const ll MOD = 1e9 + 7;

ll f[1000100];

pair<int, int> dxy[4] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};

void __sol() {
  int n, m, k;
  cin >> n >> m >> k;
  int x, y, go, to;
  cin >> x >> y >> go >> to;
  vector<string> v(n + 3);
  forr(i, n) cin >> v[i + 1], v[i + 1] = '@' + v[i + 1] + '@';
  v[0] = v[1];
  v[n + 1] = v[0];

  //   x-- , y-- , go--,to--;
  int d[n + 1][m + 1];
  // memset(d,-1,sizeof(d));
  forr(i, n + 1) forr(j, m + 1) d[i][j] = n * m;
  d[x][y] = 0;
  queue<pair<int, int>> qq;
  qq.push({x, y});
  while (!qq.empty()) {
    pair<int, int> p = qq.front();
    qq.pop();
    x = p.first, y = p.second; // cout << x <<" " << y << "\n";
    if (x == go && y == to) {
      cout << d[go][to];
      return;
    }
    for (auto &ooo : dxy) {
      int p = ooo.first, q = ooo.second;
      for (int i = 1; i <= k; i++) {
        //   if( x+i*p<n && x+i*p>=0 && y+i*q<m && y+i*q>=0){
        if (v[x + i * p][y + i * q] != '.' ||
            d[x + i * p][y + i * q] <= d[x][y])
          break;
        if (d[x + i * p][y + i * q] > 1 + d[x][y]) {
          d[x + i * p][y + i * q] = 1 + d[x][y];
          qq.push({x + i * p, y + i * q});
        }
      }
    }
  }
  if (d[go][to] != n * m)
    cout << d[go][to];
  else
    cout << -1;
}

int main() {
  fastio ll tc = 1; // cin >> tc;
  while (tc--)
    __sol();
  return 0;
}


Fixed submission:
#include <climits>
#include <iostream>
#include <queue>
#include <string>
#include <vector>
#define ll long long int
#define oo 1000000000000000000
#define forr(i, n) for (ll i = 0; i < n; i++)
#define fastio                                                                 \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(0);                                                                  \
  cout.tie(0);
#define all(x) x.begin(), x.end()
#define eb emplace_back
#define pb push_back

using namespace std;

const ll MOD = 1e9 + 7;

ll f[1000100];

pair<int, int> dxy[4] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};

void __sol() {
  int n, m, k;
  cin >> n >> m >> k;
  int x, y, go, to;
  cin >> x >> y >> go >> to;
  vector<string> v(n + 3);
  forr(i, n) cin >> v[i + 1], v[i + 1] = '@' + v[i + 1] + '@';
  string faltu(m + 3, '@');
  v[0] = faltu;
  v[n + 1] = faltu;

  //   x-- , y-- , go--,to--;
  int d[n + 1][m + 1];
  // memset(d,-1,sizeof(d));
  forr(i, n + 1) forr(j, m + 1) d[i][j] = n * m;
  d[x][y] = 0;
  queue<pair<int, int>> qq;
  qq.push({x, y});
  while (!qq.empty()) {
    pair<int, int> p = qq.front();
    qq.pop();
    x = p.first, y = p.second; // cout << x <<" " << y << "\n";
    if (x == go && y == to) {
      cout << d[go][to];
      return;
    }
    for (auto &ooo : dxy) {
      int p = ooo.first, q = ooo.second;
      for (int i = 1; i <= k; i++) {
        //   if( x+i*p<n && x+i*p>=0 && y+i*q<m && y+i*q>=0){
        if (v[x + i * p][y + i * q] != '.' ||
            d[x + i * p][y + i * q] <= d[x][y])
          break;
        if (d[x + i * p][y + i * q] > 1 + d[x][y]) {
          d[x + i * p][y + i * q] = 1 + d[x][y];
          qq.push({x + i * p, y + i * q});
        }
      }
    }
  }
  if (d[go][to] != n * m)
    cout << d[go][to];
  else
    cout << -1;
}

int main() {
  fastio ll tc = 1; // cin >> tc;
  while (tc--)
    __sol();
  return 0;
}