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

#include <stdio.h>
#include <string.h>

struct data {
  char name[101]; // ¼O
  int price;      // li
  int ren;        // BàÅ«é©
  int renkin
      [101]; // BàÅg¤itemÌzñÌY¦[0]ÉÍÂðüêÄ¨­
};
data item[101];
int visit[101]; // »ÌACeðêxKê½©Ç¤©B

int func(int number) {
  int c = item[number].renkin[0];
  int ans = 0;
  visit[number] = 1;
  //	printf("%s\\n",item[number].name);
  if (item[number].renkin[0] == 0) {
    return item[number].price;
  }
  for (int i = 1; i <= c; i++) {
    if (visit[item[number].renkin[i]] == 1) {
      //	printf("visited!! %s
      //%d\\n",item[item[number].renkin[i]].name,item[item[number].renkin[i]].price);
      ans += item[item[number].renkin[i]].price;
    } else if (item[item[number].renkin[i]].ren == 0) {
      //			printf("Can't!!   %s
      //%d\\n",item[item[number].renkin[i]].name,item[item[number].renkin[i]].price);
      ans += item[item[number].renkin[i]].price;
    } else {
      //			printf("renkin!!  %s
      //%d\\n",item[item[number].renkin[i]].name,item[item[number].renkin[i]].price);
      ans += func(item[number].renkin[i]);
    }
  }
  if (ans < item[number].price)
    item[number].price = ans;

  return item[number].price;
}

int main(void) {
  int n, i, j, l;
  while (scanf("%d", &n), n) {

    int m, k, t;
    char temp[101];
    for (i = 0; i < n; i++) {
      scanf("%s %d", item[i].name, &item[i].price);
    }
    // ±±©çBà
    scanf("%d", &m);
    for (i = 0; i < m; i++) {

      // Å«éàÌ
      scanf("%s", temp);
      for (j = 0; j < n; j++) {
        if (!(strcmp(item[j].name, temp))) {
          item[j].ren = 1;
          break;
        }
      }
      t = j;
      //			puts(item[t].name);
      // ´¿
      scanf("%d", &k);
      item[t].renkin[0] = k;
      for (j = 0; j < k; j++) {
        scanf("%s", temp);
        for (l = 0; l < n; l++) {
          if (!(strcmp(item[l].name, temp))) {
            item[t].renkin[j + 1] = l;
            break;
          }
        }
      }
    }
    scanf("%s", temp);
    for (i = 0; i < n; i++) {
      if (!(strcmp(item[i].name, temp))) {
        break;
      }
    }
    // ±±ÜÅÇÝÝ

    // wè³ê½ACeÅÄAµÄ¢­
    // ©ªªoÄ«½ç¤BBàÅ«È¢B»±ðKê½©Å»fH
    //	puts("ÄA");
    printf("%d\\n", func(i));

    for (i = 0; i < 101; i++) {
      visit[i] = 0;
      item[i].ren = 0;
      item[i].price = 0;
    }
  }
}

Error: -11

Fixed submission:

#include <stdio.h>
#include <string.h>

struct data {
  char name[101]; // ¼O
  int price;      // li
  int ren;        // BàÅ«é©
  int renkin
      [101]; // BàÅg¤itemÌzñÌY¦[0]ÉÍÂðüêÄ¨­
};
data item[101];
int visit[101]; // »ÌACeðêxKê½©Ç¤©B

int func(int number) {
  int c = item[number].renkin[0];
  int ans = 0;
  visit[number] = 1;
  //	printf("%s\\n",item[number].name);
  if (item[number].renkin[0] == 0) {
    return item[number].price;
  }
  for (int i = 1; i <= c; i++) {
    if (visit[item[number].renkin[i]] == 1) {
      //	printf("visited!! %s
      //%d\\n",item[item[number].renkin[i]].name,item[item[number].renkin[i]].price);
      ans += item[item[number].renkin[i]].price;
    } else if (item[item[number].renkin[i]].ren == 0) {
      //			printf("Can't!!   %s
      //%d\\n",item[item[number].renkin[i]].name,item[item[number].renkin[i]].price);
      ans += item[item[number].renkin[i]].price;
    } else {
      //			printf("renkin!!  %s
      //%d\\n",item[item[number].renkin[i]].name,item[item[number].renkin[i]].price);
      ans += func(item[number].renkin[i]);
    }
  }
  if (ans > item[number].price)
    return item[number].price;
  else {
    item[number].price = ans;
    return ans;
  }
}

int main(void) {
  int n, i, j, l;
  while (scanf("%d", &n), n) {

    int m, k, t;
    char temp[101];
    for (i = 0; i < n; i++) {
      scanf("%s %d", item[i].name, &item[i].price);
    }
    // ±±©çBà
    scanf("%d", &m);
    for (i = 0; i < m; i++) {

      // Å«éàÌ
      scanf("%s", temp);
      for (j = 0; j < n; j++) {
        if (!(strcmp(item[j].name, temp))) {
          item[j].ren = 1;
          break;
        }
      }
      t = j;
      puts(item[t].name);
      // ´¿
      scanf("%d", &k);
      item[t].renkin[0] = k;
      for (j = 0; j < k; j++) {
        scanf("%s", temp);
        for (l = 0; l < n; l++) {
          if (!(strcmp(item[l].name, temp))) {
            item[t].renkin[j + 1] = l;
            break;
          }
        }
      }
    }
    scanf("%s", temp);
    for (i = 0; i < n; i++) {
      if (!(strcmp(item[i].name, temp))) {
        break;
      }
    }
    // ±±ÜÅÇÝÝ

    // wè³ê½ACeÅÄAµÄ¢­
    // ©ªªoÄ«½ç¤BBàÅ«È¢B»±ðKê½©Å»fH
    //	puts("ÄA");
    printf("%d\\n", func(i));

    for (i = 0; i < 1001; i++) {
      visit[i] = 0;
      item[i].ren = 0;
      item[i].price = 0;
    }
  }
}