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

#include <iostream>
#include <queue>
using namespace std;
int h, w, n, ans = 0;
char c[1002][1002];
pair<int, int> a[12], pi;
bool f[1002][1002];

int dist(pair<int, int> s, pair<int, int> g) {
  for (int i = 0; i < 1002; i++)
    for (int j = 0; j < 1002; j++)
      f[i][j] = false;
  // cout<<s.first<<","<<s.second<<" "<<g.first<<","<<g.second<<endl;
  queue<pair<pair<int, int>, int>> que;
  pair<pair<int, int>, int> p;
  p.first = s;
  p.second = 0;
  que.push(p);
  while (que.size() > 0) {
    p = que.front();
    que.pop();
    if (p.first == g)
      return p.second;
    f[p.first.first][p.first.second] = true;
    // cout<<p.first.first<<","<<p.first.second<<endl;
    // if(p.first.first==g.first&&p.first.second==g.second)return p.second;
    if (c[p.first.first - 1][p.first.second] != 'X' &&
        !f[p.first.first - 1][p.first.second]) {
      p.first.first--;
      p.second++;
      que.push(p);
      p.first.first++;
      p.second--;
      f[p.first.first - 1][p.first.second] = true;
    }
    if (c[p.first.first + 1][p.first.second] != 'X' &&
        !f[p.first.first + 1][p.first.second]) {
      p.first.first++;
      p.second++;
      que.push(p);
      p.first.first--;
      p.second--;
      f[p.first.first + 1][p.first.second] = true;
    }
    if (c[p.first.first][p.first.second - 1] != 'X' &&
        !f[p.first.first][p.first.second - 1]) {
      p.first.second--;
      p.second++;
      que.push(p);
      p.first.second++;
      p.second--;
      f[p.first.first][p.first.second - 1] = true;
    }
    if (c[p.first.first][p.first.second + 1] != 'X' &&
        !f[p.first.first][p.first.second + 1]) {
      p.first.second++;
      p.second++;
      que.push(p);
      p.first.second--;
      p.second--;
      f[p.first.first][p.first.second + 1] = true;
    }
  }
  return -1;
}

int main() {
  scanf("%d%d%d", &h, &w, &n);
  for (int i = 0; i < 1002; i++)
    for (int j = 0; j < 1002; j++)
      c[i][j] = 'X';
  for (int i = 1; i <= h; i++) {
    scanf("\\n");
    for (int j = 1; j <= w; j++) {
      scanf("%c", &c[i][j]);
      if ('1' <= c[i][j] && c[i][j] <= '9') {
        a[c[i][j] - 48].first = i;
        a[c[i][j] - 48].second = j;
      }
      if (c[i][j] == 'S') {
        a[0].first = i;
        a[0].second = j;
      }
    }
  }
  /*for(int i=1;i<=h;i++){
          for(int j=1;j<=w;j++){
                  printf("%c",c[i][j]);
          }
          printf("\\n");
  }*/
  for (int i = 1; i <= n; i++) {
    // cout<<i<<endl;
    ans += dist(a[i - 1], a[i]);
  }
  printf("%d\\n", ans);
}

Error: 0

Fixed submission:

#include <iostream>
#include <queue>
using namespace std;
int h, w, n, ans = 0;
char c[1002][1002];
pair<int, int> a[12], pi;
bool f[1002][1002];

int dist(pair<int, int> s, pair<int, int> g) {
  for (int i = 0; i < 1002; i++)
    for (int j = 0; j < 1002; j++)
      f[i][j] = false;
  // cout<<s.first<<","<<s.second<<" "<<g.first<<","<<g.second<<endl;
  queue<pair<pair<int, int>, int>> que;
  pair<pair<int, int>, int> p;
  p.first = s;
  p.second = 0;
  que.push(p);
  while (que.size() > 0) {
    p = que.front();
    que.pop();
    if (p.first == g)
      return p.second;
    f[p.first.first][p.first.second] = true;
    // cout<<p.first.first<<","<<p.first.second<<endl;
    // if(p.first.first==g.first&&p.first.second==g.second)return p.second;
    if (c[p.first.first - 1][p.first.second] != 'X' &&
        !f[p.first.first - 1][p.first.second]) {
      p.first.first--;
      p.second++;
      que.push(p);
      p.first.first++;
      p.second--;
    }
    if (c[p.first.first + 1][p.first.second] != 'X' &&
        !f[p.first.first + 1][p.first.second]) {
      p.first.first++;
      p.second++;
      que.push(p);
      p.first.first--;
      p.second--;
    }
    if (c[p.first.first][p.first.second - 1] != 'X' &&
        !f[p.first.first][p.first.second - 1]) {
      p.first.second--;
      p.second++;
      que.push(p);
      p.first.second++;
      p.second--;
    }
    if (c[p.first.first][p.first.second + 1] != 'X' &&
        !f[p.first.first][p.first.second + 1]) {
      p.first.second++;
      p.second++;
      que.push(p);
      p.first.second--;
      p.second--;
    }
  }
  return -1;
}

int main() {
  scanf("%d%d%d", &h, &w, &n);
  for (int i = 0; i < 1002; i++)
    for (int j = 0; j < 1002; j++)
      c[i][j] = 'X';
  for (int i = 1; i <= h; i++) {
    scanf("\\n");
    for (int j = 1; j <= w; j++) {
      scanf("%c", &c[i][j]);
      if ('1' <= c[i][j] && c[i][j] <= '9') {
        a[c[i][j] - 48].first = i;
        a[c[i][j] - 48].second = j;
      }
      if (c[i][j] == 'S') {
        a[0].first = i;
        a[0].second = j;
      }
    }
  }
  /*for(int i=1;i<=h;i++){
          for(int j=1;j<=w;j++){
                  printf("%c",c[i][j]);
          }
          printf("\\n");
  }*/
  for (int i = 1; i <= n; i++) {
    // cout<<i<<endl;
    ans += dist(a[i - 1], a[i]);
  }
  printf("%d\\n", ans);
}