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

#include <bits/stdc++.h>
#define ff first
#define se second
using namespace std;
int n, m, a, b, c, d, k;
const int inf = 1e8 + 5;
queue<pair<pair<int, int>, int>> q;
bool cek(int a, int b) {
  if (a >= 1 && a <= n && b >= 1 && b <= m)
    return true;
  return false;
}
int main() {
  cin >> n >> m >> k >> a >> b >> c >> d;
  int flag[n + 2][m + 2] = {inf};
  char arr[n + 2][m + 3] = {'*'};
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++)
      cin >> arr[i][j];
  }
  q.push({{a, b}, 0});
  flag[a][b] = 0;
  while (!q.empty()) {
    int x, y, z;
    x = q.front().ff.ff;
    y = q.front().ff.se;
    z = q.front().se;
    q.pop();
    // cout<<x<<" "<<y<<" "<<z<<endl;
    if (x == c && y == d) {
      cout << flag[c][d] << endl;
      return 0;
    }
    for (int i = 1; i <= k; i++) {
      if (cek(x, y - i) && flag[x][y - i] == 0 && arr[x][y - i] != '@')
        flag[x][y - i] = z + 1, q.push({{x, y - i}, z + 1});
      else if (!cek(x, y - i) || arr[x][y - i] == '@' || flag[x][y - i] == z)
        break;
    }
    for (int i = 1; i <= k; i++) {
      if (cek(x + i, y) && flag[x + i][y] == 0 && arr[x + i][y] != '@')
        flag[x + i][y] = z + 1, q.push({{x + i, y}, z + 1});
      else if (!cek(x + i, y) || arr[x + i][y] == '@' || flag[x + i][y] == z)
        break;
    }
    for (int i = 1; i <= k; i++) {
      if (cek(x, y + i) && flag[x][y + i] == 0 && arr[x][y + i] != '@')
        flag[x][y + i] = z + 1, q.push({{x, y + i}, z + 1});
      else if (!cek(x, y + i) || arr[x][y + i] == '@' || flag[x][y + i] == z)
        break;
    }
    for (int i = 1; i <= k; i++) {
      if (cek(x - i, y) && flag[x - i][y] == 0 && arr[x - i][y] != '@')
        flag[x - i][y] = z + 1, q.push({{x - i, y}, z + 1});
      else if (!cek(x - i, y) || arr[x - i][y] == '@' || flag[x - i][y] == z)
        break;
    }
  }
  cout << "-1" << endl;
}

Error: 0

Fixed submission:

// Shariful Islam(1804011)
// Chittagong University of Engineering & technology
#include <bits/stdc++.h>
#define pb push_back
#define fin(i, arr, n)                                                         \\
  for (i = 0; i < n; i++)                                                      \\
  cin >> arr[i]
#define fout(i, arr, n)                                                        \\
  for (i = 0; i < n; i++)                                                      \\
  cout << arr[i] << " "
#define inf 9223372036854775807
#define vi vector<ll>
#define init ll n, m, a, i, b, j, k, t, x, y, z, tc, u, v, w
#define pi acos(-1.00)
#define mod 1000000007
using namespace std;
typedef long long ll;
struct node {
  ll r, c;
} n1;
ll dr[] = {-1, 0, 1, 0};
ll dc[] = {0, -1, 0, 1};
ll R, C, a, b, x, y, k;
ll visited[1000005] = {0};
char ch[1000005];
ll f(ll i, ll j) { return i * C + j + 1; }
bool valid(ll r, ll c) {
  return (r >= 0 && c >= 0 && r < R && c < C && visited[f(r, c)] == 0);
}

node inv(ll t) {
  node n1;
  if (t % C == 0) {
    n1.r = t / C - 1;
    n1.c = C - 1;
  } else {
    n1.r = t / C;
    n1.c = (t % C) - 1;
  }
  return n1;
}

ll bfs(ll r1, ll c1, ll r2, ll c2) {
  ll dist[1000005] = {0};
  if (r1 == r2 && c1 == c2)
    return 0;
  ll i, j;
  queue<ll> Q;
  Q.push(f(r1, c1));
  visited[f(r1, c1)] = 1;
  dist[f(r1, c1)] = 0;
  while (!Q.empty()) {
    ll u = Q.front();
    Q.pop();
    n1 = inv(u);
    for (i = 0; i < 4; i++) {
      ll flag = 0;
      for (j = 1; j <= k; j++) {
        ll v = f(n1.r + dr[i] * j, n1.c + dc[i] * j);
        if (valid(n1.r + dr[i] * j, n1.c + dc[i] * j) && flag == 0) {

          visited[v] = 1;
          dist[v] = dist[u] + 1;
          if (f(r2, c2) == v)
            return dist[v];
          Q.push(v);

        } else if (ch[v] == '@') {
          flag = 1;
        }
      }
    }
  }
  return -1;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(0);
  // freopen("read.txt","r",stdin);
  // freopen("write.txt","w",stdout);
  ll i, j;
  cin >> R >> C >> k >> a >> b >> x >> y;

  for (i = 0; i < R; i++) {
    for (j = 0; j < C; j++) {
      char c;

      cin >> c;
      ch[i * C + j + 1] = c;
      if (c == '@')
        visited[f(i, j)] = 1;
    }
  }
  /*f(i,R)
  {
      f(j,C)
      cout<<visit[i*C+j+1];
      cout<<endl;
  }*/
  /* for(i=0;i<R;i++)
   {
       for(j=0;j<C;j++)
       {
           cout<<rsum[f(i,j)]<<" ";
       }
       cout<<endl;
   }
   cout<<"__________"<<endl;
   for(i=0;i<R;i++)
   {
       for(j=0;j<C;j++)
       {
           cout<<csum[f(i,j)]<<" ";
       }
       cout<<endl;
   }*/
  cout << bfs(a - 1, b - 1, x - 1, y - 1) << endl;
  // cout<<inv(12).r<<" "<<inv(12).c<<endl;
}