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

#include <limits.h>
#include <stdio.h>

const int INF = INT_MAX;

int main(void) {
  int n, m, a, b, k, t;
  int tcost[105][105], mcost[105][105], node[105], used[105];
  int i, j, min, cost, time;

  while (1) {
    scanf("%d %d", &n, &m);

    if (n == 0 && m == 0) {
      break;
    }

    for (i = 0; i < m; i++) {
      for (j = 0; j < m; j++) {
        mcost[i][j] = INF;
        tcost[i][j] = INF;
      }
    }

    for (i = 0; i < n; i++) {
      scanf("%d %d", &a, &b);
      a--;
      b--;
      scanf("%d %d", &cost, &time);

      if (cost < mcost[a][b]) {
        mcost[a][b] = cost;
        mcost[b][a] = cost;
      }
      if (time < tcost[a][b]) {
        tcost[a][b] = time;
        tcost[b][a] = time;
      }
    }

    scanf("%d", &k);

    for (i = 0; i < k; i++) {
      scanf("%d %d %d", &a, &b, &t);
      a--;
      b--;
      for (j = 0; j < m; j++) {
        node[j] = INF;
        used[j] = 0;
      }

      node[a] = 0;
      while (1) {
        used[a] = 1;
        min = INF;

        for (j = 0; j < m; j++) {
          if (t == 1) {
            if (used[j] == 0 && tcost[a][j] != INF &&
                node[j] > node[a] + tcost[a][j]) {
              node[j] = node[a] + tcost[a][j];
            }
            if (used[j] == 0 && (min == INF || node[min] > node[j])) {
              min = j;
            }
          } else {
            if (used[j] == 0 && mcost[a][j] != INF &&
                node[j] > node[a] + mcost[a][j]) {
              node[j] = node[a] + mcost[a][j];
            }
            if (used[j] == 0 && (min == INF || node[min] > node[j])) {
              min = j;
            }
          }
        }
        a = min;
        if (a == b) {
          break;
        }
      }
      printf("%d\\n", node[b]);
    }
  }
  return (0);
}

Error: 0

Fixed submission:

#include <limits.h>
#include <stdio.h>

const int INF = INT_MAX;

int main(void) {
  int n, m, a, b, k, t;
  int tcost[105][105], mcost[105][105], node[105], used[105];
  int i, j, min, no1, no2;

  while (1) {
    scanf("%d %d", &n, &m);

    if (n == 0 && m == 0) {
      break;
    }

    for (i = 0; i < m; i++) {
      for (j = 0; j < m; j++) {
        mcost[i][j] = INF;
        tcost[i][j] = INF;
      }
    }

    for (i = 0; i < n; i++) {
      scanf("%d %d", &a, &b);
      a--;
      b--;
      scanf("%d %d", &no1, &no2);

      if (no1 < mcost[a][b]) {
        mcost[a][b] = no1;
        mcost[b][a] = no1;
      }
      if (no2 < mcost[a][b]) {
        tcost[a][b] = no2;
        tcost[b][a] = no2;
      }
    }

    scanf("%d", &k);

    for (i = 0; i < k; i++) {
      scanf("%d %d %d", &a, &b, &t);
      a--;
      b--;
      for (j = 0; j < m; j++) {
        node[j] = INF;
        used[j] = 0;
      }

      node[a] = 0;
      while (1) {
        used[a] = 1;
        min = INF;

        for (j = 0; j < m; j++) {
          if (t == 1) {
            if (used[j] == 0 && tcost[a][j] != INF &&
                node[j] > node[a] + tcost[a][j]) {
              node[j] = node[a] + tcost[a][j];
            }
            if (used[j] == 0 && min > node[j]) {
              min = j;
            }
          } else {
            if (used[j] == 0 && tcost[a][j] != INF &&
                node[j] > node[a] + mcost[a][j]) {
              node[j] = node[a] + mcost[a][j];
            }
            if (used[j] == 0 && min > node[j]) {
              min = j;
            }
          }
        }
        a = min;
        if (a == b) {
          break;
        }
      }
      printf("%d\\n", node[b]);
    }
  }
  return (0);
}